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)
-   -   Problema con una consulta Insert (https://www.clubdelphi.com/foros/showthread.php?t=47746)

enecumene 06-09-2007 04:56:15

Problema con una consulta Insert
 
Hola Compañeros de nuevo vuelvo con otro obstaculo en mi camino (por asi decirlo:D) esta es mi consulta:

Código Delphi [-]
procedure TFEntrada.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then begin
 with AEmpleado do begin
  if active then Close;
  sql.Clear;
  SQL.Add(' SELECT cedula, nombre, cargo, tanda FROM Empleado ');
  SQL.Add('WHERE cedula = '+Edit1.Text+'' );
  Open;
  if not IsEmpty then begin
    DBText1.Caption:=fieldByName('Nombre').AsString;
    DBText2.Caption:=fieldByName('cargo').AsString;
    DBText3.Caption:=fieldByName('tanda').AsString;
    DBText4.Caption:=TimetoStr(now);
    DateSeparator:= '/';
    ShortDateFormat:= 'dd/mm/yyyy';
    DBText5.Caption:= DateToStr(Date);
    AEntrada.SQL.Clear;
    AEntrada.SQL.Add('INSERT INTO Asistencia (cedula, nombre, cargo, tanda, entrada, salida, fecha, excusa, licencia, permiso,vacacion, enfermedad, servicio)');
    AEntrada.SQL.Add(' Values('+Edit1.Text+', '+DBText1.Caption+', '+DBText2.Caption+', '+DBText3.Caption+', '+DBText4.Caption+', "", '+DBText5.Caption+', "EX", "LI", "PE", "VA", "EN", "SE")');
    ShowMessage(AEntrada.SQL.Text);
    AEntrada.ExecSQL;
  end else begin
    ShowMessage('Empleado no existe');
   end;
  end;
 end;
end;

esta es el resultado de la consulta:

Cita:

---------------------------
Asistencia
---------------------------
INSERT INTO Asistencia (cedula, nombre, cargo, tanda, entrada, salida, fecha, excusa, licencia, permiso,vacacion, enfermedad, servicio)
Values(00113783906, Fernando Leonor, Negociador de Compras, Matutina, 10:40:52 p.m., "", 05/09/2007, "EX", "LI", "PE", "VA", "EN", "SE")

---------------------------
OK
---------------------------
y este es el error que me tira:

Cita:

---------------------------
Debugger Exception Notification
---------------------------
Project Asistencia.exe raised exception class EOleException with message 'Parameter object is improperly defined. Inconsistent or incomplete information was provided'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Estoy trabajando con ADO, Access y delphi7,

los campos entrada y salida son de tipo Date/Time formato longTime, el campo fecha de tipo Date/Time formato shortDate, el campo cedula es de tipo integer y los demas de tipo texto.

Saludos...

ElDioni 06-09-2007 10:38:27

No se si será eso, pero yo para mi que te faltan los comillas simples en los valores de tipo string, yo para poner las comillas simples en las consultas de sql utilizo el comando quotedstr, te pongo un ejemplo:

Código Delphi [-]
adoquery1.sql.text:='SELECT nombre FROM clientes WHERE nombre=' + quotedstr(edit1.text);

de esta forma me coloca las comillas dentro de la consulta, prueba a ver si te funciona con esto.
tambien puedes utilizar el quotedstr con texto literal, ejemplo:

Código Delphi [-]
adoquery1.sql.text:='SELECT nombre FROM clientes WHERE nombre=' + quotedstr('ElDioni');

Espero te sirva de algo lo que te he dicho. Un saludo

enecumene 07-09-2007 00:41:13

Hey ElDioni muchas gracias por aclararme la duda, mi codigo quedo asi:

Código Delphi [-]
AEntrada.SQL.Clear;
    AEntrada.SQL.Add('INSERT INTO Asistencia (cedula, nombre, cargo, tanda, entrada, salida, fecha, excusa, licencia, permiso,vacacion, enfermedad, servicio)');
    AEntrada.SQL.Add(' Values('+Quotedstr(Edit1.Text)+', '+Quotedstr(DBText1.Caption)+', '+Quotedstr(DBText2.Caption)+', '+Quotedstr(DBText3.Caption)+', '+Quotedstr(DBText4.Caption)+', '+Quotedstr('00:00:00')+', '+Quotedstr(DBText5.Caption)+', '+Quotedstr('EX')+', '+Quotedstr('LI')+', '+Quotedstr('PE')+', '+Quotedstr('VA')+', '+Quotedstr('EN')+', '+Quotedstr('SE')+')');
    ShowMessage(AEntrada.SQL.Text);
    AEntrada.ExecSQL;

siempre fallo con el Quotedstr o IntToInt, etc, etc. no logro acostumbrarme ya que estoy haciendo una transicion desde PHP.

de nuevo te lo agradezco...

Saludos...

enecumene 07-09-2007 02:06:38

Siguiendo el mismo hilo, se me presenta otro problema, no se me quiere actualizar un campo tipo hora, codigo:

Código Delphi [-]
//Consulta para registrar la salida del empleado
    ASalida.SQL.Clear;
    ASalida.SQL.Add('UPDATE Asistencia SET salida = '+Quotedstr(DBText4.Caption)+' WHERE cedula = '+Edit1.Text+' and fecha = '+DBText5.Caption+' ');
    ShowMessage(ASalida.SQL.Text);
    ASalida.ExecSQL;

resultado de la consulta:

Cita:

---------------------------
Asistencia
---------------------------
UPDATE Asistencia SET salida = '07:59:13 p.m.' WHERE cedula = 00113783907 and fecha = 06/09/2007

---------------------------
OK
---------------------------
en la base de datos el campo salida es tipo Date/Time formato long time y me aparece asi: 12:00:00 a.m. el programa asume que actualizo pero en la base de datos no, que estoy haciendo mal?:confused::confused:

enecumene 07-09-2007 03:58:21

:confused::confused:

Paoti 07-09-2007 04:26:34

que onda...


porque no haces el update desde la base de datos


por ejemplo di es así:

Código SQL [-]
update tabla set campoFecha = '12:00'

en tonces trata de poner el campo con el formato de hora especifacado...


edtito:

no el campo, la etiqueta que quieres meter... puedes utilizar la función Format()


checa la ayuda de delphi para esa función


La franja horaria es GMT +2. Ahora son las 18:57:21.

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