Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Modificar Fecha SQL (https://www.clubdelphi.com/foros/showthread.php?t=52201)

mjjj 14-01-2008 03:59:13

Modificar Fecha SQL
 
Hola amigos... tengo que modificar un registro, estoy utilzando TIBSQL. El codigo lo tengo asi:

Código Delphi [-]
 
sedit2.text:=datetostr(now);
IBSQL1.Close;
IBSQL1.SQL.Clear;
IBSQL1.SQL.Add('UPDATE compras');

IBSQL1.SQL.Add('SET fecha='+quotedstr(sedit2.text));
IBSQL1.SQL.Add('where empresa='+quotedstr(label1.caption));
IBSQL1.SQL.Add('and noc='+quotedstr(noc));
 
if not IBDatabase1.InternalTransaction.InTransaction then
IBDatabase1.InternalTransaction.StartTransaction;
IBSQL1.Prepare;
IBSQL1.ExecQuery;
try
IBDatabase1.InternalTransaction.Commit;
except
IBDatabase1.InternalTransaction.Rollback;

El problema es que en la tabla el campo Fecha esta definido como DATE, y al ejecutar el codigo me tira este error:

"Conversion error from string "13-01-2008".

Alguna idea de como resolverlo...

gracias

jachguate 14-01-2008 06:39:38

Te recomiendo el uso de parámetros, de manera que tu base de datos y el motor que usas se encarguen de definir el formato en que trasladarán las fechas. (válido también para números y cadenas de texto).

Código Delphi [-]
  IBSQL1.Close;
  IBSQL1.SQL.Clear;
  IBSQL1.SQL.Add('UPDATE compras');
  IBSQL1.SQL.Add('SET fecha= :fecha');
  IBSQL1.SQL.Add('where empresa = :empresa');
  IBSQL1.SQL.Add('and noc=:noc');
  ibSQL1.ParamByName('fecha').AsDateTime := now;
  ibSQL1.ParamByName('empresa').AsString := label1.caption;
  ibSQL1.ParamByName('noc').AsString := noc;
  if not IBDatabase1.InternalTransaction.InTransaction then
    IBDatabase1.InternalTransaction.StartTransaction;
  try
    IBSQL1.Prepare;
    IBSQL1.ExecQuery;
    IBDatabase1.InternalTransaction.Commit;
  except
    IBDatabase1.InternalTransaction.Rollback;
    raise;
  end;

Como ves, he cambiado también el bloque try/except. La verdad, no le hallé sentido como estaba antes. :)

Hasta luego.

;)

mjjj 14-01-2008 17:08:21

Gracias... funciono perfecto.
Ahora otro drama...
Necesito ingresar mas de un registro en cierta tabla... utilizo el siguiente codigo:

Código Delphi [-]
IBSQL2.close;
IBSQL2.SQL.Clear;
IBSQL2.SQL.add('INSERT into DETCOMPRAS');
IBSQL2.SQL.Add('(');

IBSQL2.SQL.Add(' empresa,');
IBSQL2.SQL.Add(' noc,');
IBSQL2.SQL.Add(' ncorr)');

IBSQL2.SQL.Add('VALUES (');
ibSQL2.SQL.Add(':empresa,');  
ibSQL2.SQL.Add(':noc,'); 
ibSQL2.SQL.Add(':ncorr)'); 

ibSQL2.ParamByName('empresa').asstring:=empresa;
ibSQL2.ParamByName('noc').asfloat:=result;
ibSQL2.ParamByName('ncorr').asstring:=inttostr(I);

Con el codigo anterior puedo ingresar un registro sin problema... el problema se presenta cuando quiero ingresar mas de un registro, los cuales estan integrados por los mismos campos anteriores.

Como hago eso... deberia generar tantas sentencias SQL como registros quisiera ingresar, y luego confirmar la transaccion?

jachguate 16-01-2008 06:09:42

Algo así:

Código Delphi [-]
  ibSQL2.ParamByName('empresa').asstring:=empresa;
  ibSQL2.ParamByName('noc').asfloat:=result;
  for I := 1 to 100 do
  begin
    ibSQL2.ParamByName('ncorr').asstring:=inttostr(I);
    ibSQL2.ExecSQL();
  end;
  ibTransaction1.Commit();

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 13:56:16.

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