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)
-   -   Como capturar una variable de Firebird en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=94549)

Ncvg 27-03-2020 20:59:50

Como capturar una variable de Firebird en Delphi
 
Buenas comunidad, tengo un problema, hace no mucho que uso delphi y quisiera saber como puedo hacer consultas con el text de un edit y al mismo tiempo capturar esa variable.
Para dejarme entender tengo esta consulta en firebird.
Select Sum(monto) from Montos WHERE NOMBRES = 'Roberto Ramirez' AND CAST(FECHA as DATE) = CURRENT_DATE

Teniendo esa consulta sumó el monto del campo monto de dicha persona (En este caso Roberto Ramirez) en la fecha actual.

Ahora quiero llevar eso a un IBQuery en Delphi7, pero que en vez de encontrar a Roberto Ramirez, use el dato de un Edit para buscar a la persona que yo ponga en el text del edit y completando dicha consulta, agarrar el SUM y ponerlo dentro de una variable int llamada monto dentro de Delphi, hasta el momento tengo esto dentro de un boton.

IBQuery1.Close();
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('Select Sum(monto) from Montos');
IBQuery1.SQL.Add('WHERE NOMBRES = '+ENOMBRE.Text);
IBQuery1.SQL.Add('AND CAST(FECHA as DATE) = CURRENT_DATE');
IBQuery1.ExecSQL;
Monto := IBQuery1.FieldByName('SUM').AsInteger;
ShowMessage(InttoStr(Monto));

Pero me sale un error con 'Token unknow Ramirez' (Buscando el nombre de la consulta anterior en el edit), cual es el error que tengo y que codigo puedo usar para lograr lo que busco, de antemano les agradezco mucho amigos, puesto que busco y busco y no encuentro algo que me sirva :(

Casimiro Notevi 27-03-2020 21:28:07

Hola, te recomiendo que uses parámetros.
Código Delphi [-]
IBQuery1.Close();
IBQuery1.SQL.Text := 'Select Sum(monto) from Montos WHERE NOMBRES = :nombre AND CAST(FECHA as DATE) = CURRENT_DATE';
ibquery.params[0].asstring := edit1.Text;
IBQuery1.ExecSQL;
Monto := IBQuery1.Fields[0].AsInteger;
ShowMessage(InttoStr(Monto));
Y recuerda usar etiquetas cuando pongas código. Bienenido a clubdelphi :)


Ncvg 27-03-2020 22:23:32

Como capturar una variable de Firebird en Delphi
 
1 Archivos Adjunto(s)
Cita:

Empezado por Casimiro Notevi (Mensaje 536509)
Hola, te recomiendo que uses parámetros.
Código Delphi [-]
IBQuery1.Close();
IBQuery1.SQL.Text := 'Select Sum(monto) from Montos WHERE NOMBRES = :nombre AND CAST(FECHA as DATE) = CURRENT_DATE';
ibquery.params[0].asstring := edit1.Text;
IBQuery1.ExecSQL;
Monto := IBQuery1.Fields[0].AsInteger;
ShowMessage(InttoStr(Monto));
Y recuerda usar etiquetas cuando pongas código. Bienvenido a clubdelphi :)

Buenas gracias por la bienvenida y el consejo me es de mucha ayuda encontrar un lugar donde pueda consultar y ser ayudado, acabo de arreglarlo a algo asi.

Código Delphi [-]
IBQuery1.Close();
IBQuery1.Open();
IBQuery1.SQL.Text := 'Select Sum(monto) from Montos WHERE NOMBRES = :nombre AND CAST(FECHA as DATE) = CURRENT_DATE';
ibquery1.params[0].asstring := ENOMBRE.Text;
IBQuery1.ExecSQL;
Monto := IBQuery1.Fields[0].AsInteger;
ShowMessage(InttoStr(Monto));

Pero ahora me aparece el siguiente error 'Empty SQL Statement' probe quitando el IBQuery.Open(), pero me aparece el error 'Use open for a select Statement'. a que se puede deber.


Lo uso en SQL y me da un solo dato por lo que la columna 0 me debería devolver ese dato, que puede estar mal?

Casimiro Notevi 27-03-2020 22:37:09

Código Delphi [-]
IBQuery1.Close();
// IBQuery1.Open();
Quita esa línea.

Ncvg 27-03-2020 22:53:36

Como capturar una variable de Firebird en Delphi
 
1 Archivos Adjunto(s)
Ahora me aparece 'Use Open for a Select Statement' dejo el error en adjunto :(

No se a que se puede deber.

Casimiro Notevi 27-03-2020 23:01:06

Quería decirte que quitaras el .Open de ahí, pero que lo pusieras en lugar del ExecSql.
Código Delphi [-]
IBQuery1.Close();
IBQuery1.SQL.Text := 'Select Sum(monto) from Montos WHERE NOMBRES = :nombre AND CAST(FECHA as DATE) = CURRENT_DATE';
ibquery1.params[0].asstring := ENOMBRE.Text;
IBQuery1.Open();
Monto := IBQuery1.Fields[0].AsInteger;
ShowMessage(InttoStr(Monto));
El Open es cuando se hace Select. El ExecSql cuando es delete, insert, update.

Ncvg 27-03-2020 23:05:56

Acaba de funcionar, te agradezco mucho, no conozco mucho de Delphi pero esto me ayuda a aprender mucho, deje una recomendación de reputación en tu nombre, gracias :D

Casimiro Notevi 27-03-2020 23:18:08

Pues mira este hilo.
De ahí te recomiendo La cara oculta de Delphi 4, que está enfocado principalmente a bases de datos.
Aparte, en nuestro FTP encontrarás gigas de información, cursos, programas, componentes, libros, ejemplos, etc.

Casimiro Notevi 28-03-2020 11:27:49

Por cierto, los paréntesis en close y open también sobran.
Código Delphi [-]
IBQuery1.Close;
IBQuery1.SQL.Text := 'Select Sum(monto) from Montos WHERE NOMBRES = :nombre AND CAST(FECHA as DATE) = CURRENT_DATE';
ibquery1.params[0].asstring := ENOMBRE.Text;
IBQuery1.Open;
Monto := IBQuery1.Fields[0].AsInteger;
ShowMessage(InttoStr(Monto));

Neeruu 10-04-2020 06:43:07

Cita:

Empezado por Ncvg (Mensaje 536506)
Buenas comunidad, tengo un problema, hace no mucho que uso delphi y quisiera saber como puedo hacer consultas con el text de un edit y al mismo tiempo capturar esa variable.
Para dejarme entender tengo esta consulta en firebird.
Select Sum(monto) from Montos WHERE NOMBRES = 'Roberto Ramirez' AND CAST(FECHA as DATE) = CURRENT_DATE

Teniendo esa consulta sumó el monto del campo monto de dicha persona (En este caso Roberto Ramirez) en la fecha actual.

Ahora quiero llevar eso a un IBQuery en Delphi7, pero que en vez de encontrar a Roberto Ramirez, use el dato de un Edit para buscar a la persona que yo ponga en el text del edit y completando dicha consulta, agarrar el SUM y ponerlo dentro de una variable int llamada monto dentro de Delphi, hasta el momento tengo esto dentro de un boton.

IBQuery1.Close();
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('Select Sum(monto) from Montos');
IBQuery1.SQL.Add('WHERE NOMBRES = '+ENOMBRE.Text);
IBQuery1.SQL.Add('AND CAST(FECHA as DATE) = CURRENT_DATE');
IBQuery1.ExecSQL;
Monto := IBQuery1.FieldByName('SUM').AsInteger;
ShowMessage(InttoStr(Monto));

Pero me sale un error con 'Token unknow Ramirez' (Buscando el nombre de la consulta anterior en el edit), cual es el error que tengo y que codigo puedo usar para lograr lo que busco, de antemano les agradezco mucho amigos, puesto que busco y busco y no encuentro algo que me sirva :(

Hola, error que te aparece se debe a que estas concatenando mal el parámetro.

Código Delphi [-]
IBQuery1.Close();
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('Select Sum(monto) from Montos');
IBQuery1.SQL.Add('WHERE NOMBRES = '+QuotedStr(ENOMBRE.Text));
IBQuery1.SQL.Add('AND CAST(FECHA as DATE) = CURRENT_DATE');
IBQuery1.ExecSQL;
Monto := IBQuery1.FieldByName('SUM').AsInteger;
ShowMessage(InttoStr(Monto));

Interpreto que nombres es un string, por eso agregue el QuotedStr

Prueba y avisame.
Saludos.


La franja horaria es GMT +2. Ahora son las 06:52:19.

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