PDA

Ver la Versión Completa : Consulta de FIBPlus


Delphos
23-01-2005, 20:35:01
Hola Foro.

Alquien sabe como se hacen consultas con parametros con pFIBQuery, podrian poner un ejemplo completo para asi poder ver de paso el tema de las transacciones y demas ya que tampoco tengo muy claro el componente pFIBDataset y el pFIBTransaction.

Muchas gracias de antemano.

Salu2.

Sinaloense
24-01-2005, 17:15:17
El Sql Generator del query hace todo por ti, solo debes agregar el parámetor:

Por ejemplo:


SELECT
FOLIO,
FECHA,
CORTE,
TANQUE,
FECHAHORA,
COMBUSTIBLE,
NUEVOESTADO
FROM
DPVGCTAN
WHERE FECHA=:FECHA
AND CORTE=:CORTE


Y en el código:


if Tr_Cortes.InTransaccion then
Tr_Cortes.Commit;
Tr_Cortes.StartTransaccion; //Esta es la transacción:
QL_Corte_Tanque.Params[0].Value:=Fecha;
QL_Corte_Tanque.Params[1].AsInteger:=Corte;
QL_Corte_Tanque.ExecQuery;
..
..
Tr_Cortes.commit;



Si te das cuenta no utilize el ql_Corte_Tanque.Close antes de darle valor a los parámetros, esto es porque la transacción no está activa, y si la transacción no esta activa tampoco lo está el Query.

Después de habierto el quiery puedes accesar a los campos de la mandera tradicional. con un FieldByName por ejemplo.

Recuerda que los querys de FibPlus son unidireccionales y de solo lectura, si necesitas algo más avanzado usa mejor un dataset, que en el caso funciona igual.


Suerte.

Delphos
24-01-2005, 17:47:01
El ejemplo de antes funciona de maravilla muchas gracias.

Esta consulta tambien funciona pero ¿Esta bien estructurada, no?.

Ejemplo:

SQL:='INSERT INTO Horarios (Servicio,TiempoI,TiempoF,Horas) VALUES
(:Serv,:TInicio,:TFinal,:THoras)';
If pFIBTransaction1.InTransaction then
pFIBTransaction1.Commit;
pFIBDataSet1.Open;
pFIBDataSet1.InsertSQL.Clear;
pFIBDataSet1.SQLs.InsertSQL.Add(SQL);
pFIBDataSet1.QInsert.ParamByName('Serv').AsString := txtServ.text;
pFIBDataSet1.QInsert.ParamByName('TInicio').AsString := TI;
pFIBDataSet1.QInsert.ParamByName('TFinal').AsString := TF;
pFIBDataSet1.QInsert.ParamByName('THoras').AsString := THM;
pFIBDataSet1.QInsert.ExecQuery;
pFIBTransaction1.Commit;
pFIBDataSet1.Close;


Un saludo.