Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   insertar registros sql con delphi (https://www.clubdelphi.com/foros/showthread.php?t=71467)

anubis 20-12-2010 21:35:00

insertar registros sql con delphi
 
Buenas,

estoy intentando insertar un registro usando:

Código Delphi [-]
qproductos.SQL.Clear;
qdespachos.sql.add('insert productos set fecha = '+(fecha));
    qdespachos.SQL.Add(',');
    qdespachos.sql.add('hora = '+ QuotedStr(hora));
   qdespachos.SQL.Add(',');
   qdespachos.sql.add(' comprobante = '+ QuotedStr(comprobante));
   qdespachos.SQL.Add(',');
   qdespachos.sql.add(' precio = '+ QuotedStr(precio));

La fecha y hora son del tipo tdate y ttime, comprobante es integer y precio es real.

Con estos datos como hago que delphi me lo reconozca.

y tambien faltaria el codigo pero es autoincrementable.

un saludo y gracias

Casimiro Notevi 20-12-2010 22:12:09

Creo que te has confundido, has puesto "insert" a una sentencia "update"

insert into tabla (campos) values (valores);
update tabla set campo=valor, campo=valor, etc...

Léete un manual de sql :)

anubis 21-12-2010 19:04:30

tienes toda la razon casimiro,
de todas formas tengo un pequeño problemita a la hora de insertar

Código Delphi [-]
form1.zquery1.sql.Add('insert into contactos (codigo, nombre, fechaingre, horaingre, aportacion, observaciones) VALUES(');
 form1.ZQuery1.SQL.Add(QuotedStr(nombre));
    form1.zquery1.SQL.Add(',');
  form1.ZQuery1.SQL.Add(QuotedStr(fechaingre));
    form1.zquery1.SQL.Add(',');
    form1.ZQuery1.SQL.Add(QuotedStr(horaingre));
    form1.zquery1.SQL.Add(',');
    form1.ZQuery1.SQL.Add(QuotedStr(aportacion));
    form1.zquery1.SQL.Add(',');
    form1.ZQuery1.SQL.Add(QuotedStr(observamemo.Text));
   form1.zquery1.SQL.Add(')');
   form1.ZQuery1.ExecSQL;
El invento de arriba me ha funcionado cuando todos los datos son convertidos de edit.text, pero cuando ya son externos y variando el tipo de dato, ya no funciona.
Donde codigo es autoincrement, fechaingre y horaingre son del sistema tipo tdate y ttime, aportacion es un numero real convertido desde un edit.text y observaciones es directo desde un memo.
No puedo poner quotedstr en fecha porque es fecha, ahi tengo el problema, de que manera puedo añadir los tipos, fecha, hora y real

estoy leyendo sql, como me dijiste, pero a la hora de usarlo en delphi, tengo un pequeño problemita.

Casimiro Notevi 21-12-2010 19:25:40

Bueno, de esa forma también puedes hacerlo, aunque te recomiendo que uses otro modo, el de los parámetros, te explico con un ejemplo:

Código Delphi [-]
query.sql.text := 'insert into tbClientes (codigo,nombre,fecha,sueldo) values (:codigo,:nombre,:fecha,:sueldo)';
query.sql.parambyname('codigo').asinteger := elquesea;
query.sql.parambyname('nombre').asstring := 'pepito';
query.sql.parambyname('fecha').asdatetime := now;
query.sql.parambyname('sueldo').asfloat := 1500.50;
query.ExecQuery;

ElDioni 22-12-2010 17:24:31

Supongo que ya lo sabes, pero por si acaso, aparte de con una instrucción SQL también puedes añadir el registro de la siguiente forma.

Código Delphi [-]
form1.ZQuery1.Insert;
form1.ZQuery1.FieldByName('nombre').AsString:=nombre;
form1.ZQuery1.FieldByName('fechaingre').AsString:=fechaingre;
form1.ZQuery1.FieldByName('horaingre').AsString:=horaingre;
form1.ZQuery1.FieldByName('aportacion').AsString:=aportacion;
form1.ZQuery1.FieldByName('observaciones').AsString:=observamemo.lines.text;
form1.ZQuery1.Post;

anubis 22-12-2010 19:10:00

gracias casimiro, y gracias ElDioni.
Ya use la de casimiro y si va bien, el codigo autoincrement va solo ;).

Cualquiera de los dos metodos es lo mismo?.
Lo digo más que nada porque se tarda algo en escribir varios registros.
Me explico:
Tengo un texto plano en el que figuran lineas de detalle, son 800 lineas, pero tienen la misma estructura.
Tengo que delimitar por secciones el contenido de cada linea para ir escribiendolas en registros y ya poder hacer operaciones con ellas, una vez metidas en una base de datos.
Estoy usando sqlite.
Las preguntas:
Parece qeu se tarda en ir escribiendo cada registro nose si es normal(no es por la conversion porque use un grid normal y no tarda nada)

Otro punto es, si tengo en el dbgrid campos tipo real, me muestra la parte entera redondeada, es decir, si tengo 11.6 me muestra en el dbgrid 12, y se olvida de la parte decimal.

y tercera, aunque on es exclusivamente de sql.
Ya puse un cnotador y una barra de progreso para ver cuanto va realizado, y funciona, pero si muevo la ventana o la maximizo, esos datos se congelan y la ventana del form dice que el programa no responde, pero si espero un rato hasta que acaba la operacion el proceso acaba de completarse.

A ver sabeis por que pasa todo esto (me preocupa mas lo del dbgrid que no me muestre los numeros decimales y que se congele que el que se tarde en escribir los registros)

muchas gracias a los dos

anubis 22-12-2010 20:28:16

Como no puedo editar el mensaje anterior, dire que el tema de ver los decimales ya lo tengo arreglado, una tonteria, tenía que añadir las columnas que queria ver, en este caso todas, pero aplicarle formato para verlos.

Del resto no he encontrado solución todavía. Esto es, que se "cuelgue" mientras esta escribiendo los registros. voy a probar con un timer a ver si refresca los datos.


La franja horaria es GMT +2. Ahora son las 19:04:51.

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