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)
-   -   Simple TIBSQL (https://www.clubdelphi.com/foros/showthread.php?t=17047)

NeWNeO 21-12-2004 13:52:31

Simple TIBSQL
 
Hola:
Me gustaría saber si mi forma de ejecutar consultas desde un TIBSQL es la forma correcta o si hay otra via mejor.

Uso:
Código Delphi [-]
fQuery: TIBSQL
...
Constructor Create...;
begin
fQuery := TIBSQL.Create(Self);
fQuery.Database := MiBaseDeDatos;
fQuery.Transaction := MiTransacción;
end;
...
function ExecuteQuery(Query: string):boolean;
...
function ExecuteQuery(Query: string):boolean;
begin
 result := false;
 fQuery.Close;
 fQuery.SQL.Clear;
 fQuery.SQL.Add(query);
 fQuery.ExecQuery;
 result := true;
end;
NOTA: La base de datos está conectada y activa, las consultas con un DBGRID por ejemplo funciona a la perfección.

Cuando ejecuto la función con por ejemplo:
UPDATE La_Table Set ID="1",DIA='Martes';
voy a mi programa de gestión de base de datos (EMS IBManager) y la consulta no se ha ejecutado o su resultado no ha sido positivo. Ejecuto la MISMA consulta en la consola del EMS IBManager y la actualización se hace efectiva. ¿Es correcto todo lo que hago ó falta algun paso?
Muchas Gracias.

DarKraZY 21-12-2004 14:52:25

¿Has tenido cuidado al poner las comillas?
La consulta sería así:
Código Delphi [-]
ExecuteQuery('UPDATE La_Table Set ID="1",DIA=''Martes');

NeWNeO 22-12-2004 10:44:00

Comillas Si
 
Si, uso otra funcion (SQLFormat) parecida a la de format, en la que uso constantes como por ejemplo
Código Delphi [-]
unit SQL

implementation

ResourceString
 SQL_MI_CONSULTA = 'UPDATE Empleados SET Nombre="%s",Apellidos"%s"';

...

Un ejemplo de Esa función Seria

Código Delphi [-]

begin
ExecuteQuery(SQLFormat(SQL_MI_CONSULTA,[NeWNeO,2005]));
end;
Y la función devuelve la consulta como:
UPDATE Empleados SET Nombre="NeWNeO",Apellidos"2005"
la pego en el EMS Interbase manager, consola SQL y se que se actualiza, vamos, que por problemas de sintaxis no es. ¿Que se esté ejecutando en un Thread puede tener algo que ver para que no se actualize si la base de datos está en una unidad externa al thread? ¿Sería necesario un Synchronize dentro del a función ExecuteQuery, en la parte de fQuery.ExecQuery?

NeWNeO 22-12-2004 10:52:40

Vale xD
 
Bueno bueno... uno siempre piensa en todo menos en lo más tonto..
Código Delphi [-]
function TCDEXplorerThread.ExecuteQuery(Query: string):boolean;
begin
 result := false;
 fQuery.Close;
 fQuery.SQL.Clear;
 fQuery.SQL.Add(query);
 Synchronize(fQuery.ExecQuery);
 result := true;
 Synchronize(SQLDev);
end;

Ahí estaba el problema, al estar la base de datos en un formulario externo necesitaba usar synchronize para que funcionara la interacción con elementos externos...
Gracias de todas formas por la ayuda dark, me ha abierto un poco la mente.


La franja horaria es GMT +2. Ahora son las 22:03:32.

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