Error en sql al usar datamodule

Todo funciono perfecto con tu ayuda para escribir el código en sql (sumar datos de una tabla a otra), sin embargo cuando trate de modificarlo para usar query y tablas ubicadas en un datamodule me dio un error de 'List index out of bound(0)' y para variar no lo he podido solucionar. Te agrego el código que estoy usando:
while i < 13 do
begin
with datamodule3.libro,datamodule3.porcodigo do
begin
datamodule3.libro.Active:=False;
datamodule3.porcodigo.active:=false;
SQL.Clear;
SQL.Add('Update datamodule3.porcodigo set debe'+inttostr(i)+'=(select sum(debe) from datamodule3.libro');
SQL.add('where datamodule3.libro.codigo = datamodule3.porcodigo.codigo');
SQL.add('and datamodule3.libro.fecha between :fechaini and :fechafin)');
//AL ENTRAR AQUI DA EL ERROR
datamodule3.libro.Params[0].Asdatetime := fecha;
datamodule3.libro.Params[1].Asdatetime := fechaldom;
ExecSQL;
end;
end;

1 respuesta

Respuesta
1
Lo que tienes mal es el SQL en esta parte: Update datamodule3. Porcodigo, precisamente aquí esta mal ya que datamodule3. Porcodigo no es el nombre de tu tabla.
DataModule3. PorCodigo supongo que es el componente que manejas en delphi aunque este sea un componente TTable no significa que sea el nombre real de tu tabla en la base de datos, al igual cuando pones Where datamodule3. Libro. Código esto no es un nombre de columna estos son los objetos que manejas en delphi, no se si me entiendas. la sintaxis de un update es asi:
Digamos que tenemos una tabla llama USUARIOS ok y queremos actualizarle el nombre al usuario numero 1, entonces seria así:
Digamos que así esta la tabla USUARIOS
Id nombre edad sexo
1 FELIPE 30 M
2 MANUEL 29 M
Entonces queremos modificar el nombre a felipe por juan:
Update USUARIOS set nombre = 'JUAN'
Where ID = 1
Si este SQL tu lo quieres dinámico desde delphi como es el ejemplo que estas haciendo seria así:
SQL.add('Update USUARIOS set NOMBRE =:valorNombre')
SQL.add('Where ID = :valorID');
Entonces tenemos 2 parametros 1 para el valor del nombre y otro para el valor del ID
Datamodule3.libro.Params[0].AsString = 'JUAN';
Datamodule3.libro.Params[1].AsInteger = 1;
ExecSQL;
Ok Espero haberme explicado.
Hola: te agradezco, pude solucionar mi problema. Otra consulta al respecto, en sql existe la función NVL para los casos en que si no hay datos pueda forzar el resultado (a un valor cero por ejemplo). ¿Cómo se puede hacer en delphi?
Atentamente.
Ah si, si lo hay pero no es tanto de delphi es de SQL, y seria así:
Select isNull(valor,0) from tabla.
En este ejemplo si valor es nulo entonces te pondrá un cero.
En delphi también se puede hacer pero no te confundas SQL es un lenguaje y delphi es otro, desde delphi puedes ejecutar SQL, si me explico, lo que tu estas haciendo ahorita con este problema, es ejecutar un SQL desde delphi ok.
Ok, sin embargo al probar con "select isNull(sum(debe), 0)" me da un error de "capability not supported". ¿Esta mal la sintaxis que uso?
Atentamente.
Ah ok pueda ser por la base de datos, ¿qué base de datos manejas? ¿Y qué componentes de delphi para conectarte a la base de datos manejas?
Por que la sintaxis que te di IsNull es en SQL Server 2000
Hola:
Uso tablas en dbf (dbase). Los componentes son TQuery para tabla libro y Ttable para la tabla porcodigo
Atentamente.
Ups, temo decirte que no conozco sobre Dbase, definitivamente la sintaxis cambia, y es probable que no la reconozca, busca en google a ver si por ahí alguien sabe sobre eso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas