Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Script SQL DBExpress (https://www.clubdelphi.com/foros/showthread.php?t=42872)

fabianmk 24-04-2007 22:41:14

Script SQL DBExpress
 
Como puedo ejecutar un Script SQL con componentes DBExpress, utilizo Delphi 7, SQL Server 2000 y Componentes DBExpress.
Desde ya gracias y Saludos
Fabian

Nasca 25-04-2007 14:17:07

Lo puedes hacer a través del componente de conexión, yo lo tengo montado a través de una tabla donde tengo las distintas sentencias y luego voy ejecutando las mismas recursivamente con algo como esta sentencia:

Código Delphi [-]

function TfCriteriumACm.EjecutarSentencia: Integer;
var
 TD: TTransactionDesc;
 resultado : Integer;
begin
if not(sqlcdatos.Connected) then
  begin
   Showmessage('La conexióa la base de datos no está abierta!!!');
   Result := -100;
   Exit;
  end;
if not(cdsUpdateSQL.Active) or (cdsUpdateSQLSENTENCIA_SQL.IsNull) then
  begin
   Showmessage('La tabla de sentencias SQL de actualización no está abierta o no hay sentencia que ejecutar!!!');
   Result := -100;
   Exit;
  end;
if (cdsUpdateSQLTIPO.Value = 'stUnknow') or (cdsUpdateSQLTIPO.Value = '') then
   begin
    cdsUpdateSQL.Edit;
    cdsUpdateSQLRESULTADO.Value := -1;
    cdsUpdateSQLRESULTADO_TEXTO.Value := 'Sentencia desconocida, no ejecutada!';
    Result := -1;
    Exit;
   end;
if (cdsUpdateSQLTIPO.Value = 'stSetTerm') or (cdsUpdateSQLTIPO.Value = 'stSelect')
    or (cdsUpdateSQLTIPO.Value = 'stCreateDatabase') then
   begin
    cdsUpdateSQL.Edit;
    cdsUpdateSQLRESULTADO.Value := -1;
    cdsUpdateSQLRESULTADO_TEXTO.Value := 'Sentencia no ejecutable';
    Result := -1;
    Exit;
   end;

TD.TransactionID := cdsUpdateSQLORDEN.Value;
TD.IsolationLevel := xilREADCOMMITTED;
sqlcdatos.StartTransaction(TD);
try
 resultado := sqlcdatos.ExecuteDirect(cdsUpdateSQLSENTENCIA_SQL.AsString);
 sqlcdatos.Commit(TD);
 cdsUpdateSQL.Edit;
 cdsUpdateSQLRESULTADO.Value := resultado;
 cdsUpdateSQLRESULTADO_TEXTO.Value := 'Sentencia ejecutada sin problemas';
 Result := resultado;
except
  On E: Exception Do
     begin
       sqlcdatos.Rollback(TD);
       cdsUpdateSQL.Edit;
       cdsUpdateSQLRESULTADO.Value := -13;
       cdsUpdateSQLRESULTADO_TEXTO.Value := ('Error: '+E.Message);
       Result := -13;
     end;
end;

Parte de la lógica es por guardar y devolver un valor que me permita detener el script sql, pero si entresacas lo importante (el final) puedes apañarte.


La franja horaria es GMT +2. Ahora son las 12:52:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi