Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ExecSQL y Insert [ Marcoszorrila ] (https://www.clubdelphi.com/foros/showthread.php?t=18467)

MasterXP 13-02-2005 16:08:43

ExecSQL y Insert [ Marcoszorrila ]
 
Continuacion del post: http://www.clubdelphi.com/foros/forumdisplay.php?f=6
Cita:

Para esta pregunta al ser distinta deberías haber abierto un nuevo hilo, pero ya voy a contestarte en este mismo.
Por supuesto que se pueden utilizar sentencias del tipo Delete, Insert, Update, pero al ser conjuntos que no van a devolver datos, sino a modificar la tabla a la que estan conectados, debes activar la consulta con:
ExecSql y no con Open.
Hola de nuevo, marcos gracias por responderme el post anterior...

tengo un problemita con el Insert. Tengo esto en el Boton guardar de mi formulario:
Código:

With DATAMODULE1.Query1 do
 begin
 Close;
 SQL.Clear;
 SQL.Add('INSERT INTO Empleados.db ');
 SQL.Add('CODIGO, NOMBRE,  ');
 SQL.Add('Values ("StrToInt(Ecodigo.Text)","Enombre.Text" )');
 end;
 Datamodule1.Query1.ExecSQL;

y me da el error siguiente:
Cita:

Ivalid use of Keyword
Token:BANCA,
Line Number: 2.
:( No tengo idea de que pueda ser, si me puedes ayudar.. por favor

salu2.

marcoszorrilla 13-02-2005 16:49:17

Al tratarse de un control que contiene el texto, no debe de ir entre comillas.
He editado la respuesta porque veo que también te sobra la coma que va despues de nombre, ya que no le sigue ningún campo más.

Código Delphi [-]
 With DATAMODULE1.Query1 do
 begin
 Close;
 SQL.Clear;
 SQL.Add('INSERT INTO Empleados.db ');
 SQL.Add('CODIGO, NOMBRE  ');
 SQL.Add('Values (StrToInt(Ecodigo.Text)),Enombre.Text )');
 end;
 Datamodule1.Query1.ExecSQL;

Por otra parte al hacer una pregunta no debes de dirigirla a ningún forista en concreto, ya que cualquiera que la vea puede responderte.

Un Saludo.

MasterXP 13-02-2005 18:03:00

hola de nuevo...

he puesti esto para probar: y me funciona muy bien, lo malo es que es estatico, siempre me va a generar Codigo=7 y Nombre=Juan.
Cita:

With DATAMODULE1.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO "Empleados.db" (CODIGO, NOMBRE) VALUES (7, "Juan")')
end;
Datamodule1.Query1.ExecSQL;
entonces como se le pueden pasar parametros a la sentencia SQL? por ejemplo el contenido de un Edit o una variable..

he probado como dice marcozorrila, sin las comillas, pero no funciona:
Cita:

With DATAMODULE1.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO "Empleados.db" (CODIGO, NOMBRE) VALUES (7, edit2.Text)')
end;
Datamodule1.Query1.ExecSQL;
Tambien probe de esta forma:
Cita:

SQL.Add('INSERT INTO "Empleados.db" (CODIGO, NOMBRE) VALUES (StrtoInt(edit1.text), '+edit2.text);
por si sirve de algo, la Tabla es Paradox y uso Delphi 2005.

alguna idea de como hacerlo?


Nota:
Cita:

Por otra parte al hacer una pregunta no debes de dirigirla a ningún forista en concreto, ya que cualquiera que la vea puede responderte.

Un Saludo.
Sorry marcos, solo lo hice como referencia al post anterior, no volvera a pasar ;)

Lepe 14-02-2005 08:58:45

sql.Add espera una cadena de texto, pero puedes construir esa cadena directamente sobre la linea, es decir:

Código Delphi [-]
 SQL.Add('INSERT INTO "Empleados.db" (CODIGO, NOMBRE) VALUES  (' + 
inttostr(spinedit1.asinteger) + ', ' + edit2.Text + ')');

Saludos

MasterXP 14-02-2005 17:11:42

Cita:

Empezado por Lepe
sql.Add espera una cadena de texto, pero puedes construir esa cadena directamente sobre la linea, es decir:

Código Delphi [-]
  SQL.Add('INSERT INTO "Empleados.db" (CODIGO, NOMBRE) VALUES  (' + 
 inttostr(spinedit1.asinteger) + ', ' + edit2.Text + ')');

Saludos

Ahora me da un error bastante raro, ejemplo:

imaginemos que el valor del Edit1=5 (el edit 1 es el codigo)
y el valor del edit2='Juan' (el edit2 es el nombre)

cuando se presiona el boton, da un error que dice 'Invalid Field Name Juan '

osea el programa esta entendiendo el valor del edit2 como un campo de la tabla y no como un valor a insertarse en ella... :(

alguna idea????

roman 14-02-2005 17:57:52

Cita:

Empezado por MasterXP
Ahora me da un error bastante raro

El error no tienen nada de raro. Te recomiendo que luego del SQL.Add examines el valor de SQL.Text (ponlo en un memo o muéstralo con un ShowMessage) para que veas cuál es la sentencia que estás mandando al servidor. Compárala con la que tú mismo pusiste con datos estáticos y te darás cuenta de lo que está mal.

Como sugerencia te recomiendo que te tomes un tiempo para pensar qué es lo que está pasando. Poniendo y quitando comillas aquí y allá no es el método adecuado para entender.

También te sugiero que dediques un poco de tiempo a leer la ayuda de Delphi. Busca "Parameters" y encontrarás una sección que habla de consultas SQL parametrizadas. Usar parámetros es mucho más sencillo y legible que tratar de construir la consulta "al vuelo".

// Saludos

MasterXP 15-02-2005 03:54:56

Roman, voy a tomar tu consejo durare esta noche probando y leyendo...

si me quedo con alguna duda la posteare.

Gracias.

CCCP 12-03-2005 02:32:32

SQL.Add('INSERT INTO "Empleados.db" (CODIGO, NOMBRE) VALUES (' +
inttostr(spinedit1.asinteger) + ', ' + QuotedStr(edit2.Text) + ')');

geovany 12-03-2005 19:07:31

Existen los parametros
 
El sql quedaria asi :

insert into empleados.bd (campo1, campo2, campon) values (:value1, :value2, :valuen)

y

queryn.ParamByName('value1').AsInteger := StrToInt(edit1.Text);
queryn.ParamByName('value2').AsString := edit2.Text;

etc.

y asi queda para los datos que les kieras mandar

bye
espero y te sirva


La franja horaria es GMT +2. Ahora son las 17:32:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi