Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-02-2005
MasterXP MasterXP is offline
Miembro
 
Registrado: ene 2005
Posts: 193
Poder: 20
MasterXP Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 13-02-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 13-02-2005 a las 16:54:08.
Responder Con Cita
  #3  
Antiguo 13-02-2005
MasterXP MasterXP is offline
Miembro
 
Registrado: ene 2005
Posts: 193
Poder: 20
MasterXP Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 14-02-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 14-02-2005
MasterXP MasterXP is offline
Miembro
 
Registrado: ene 2005
Posts: 193
Poder: 20
MasterXP Va por buen camino
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????
Responder Con Cita
  #6  
Antiguo 14-02-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 15-02-2005
MasterXP MasterXP is offline
Miembro
 
Registrado: ene 2005
Posts: 193
Poder: 20
MasterXP Va por buen camino
Roman, voy a tomar tu consejo durare esta noche probando y leyendo...

si me quedo con alguna duda la posteare.

Gracias.
Responder Con Cita
  #8  
Antiguo 12-03-2005
CCCP CCCP is offline
Miembro
 
Registrado: dic 2004
Ubicación: Barcelona
Posts: 38
Poder: 0
CCCP Va por buen camino
SQL.Add('INSERT INTO "Empleados.db" (CODIGO, NOMBRE) VALUES (' +
inttostr(spinedit1.asinteger) + ', ' + QuotedStr(edit2.Text) + ')');
Responder Con Cita
  #9  
Antiguo 12-03-2005
Avatar de geovany
geovany geovany is offline
Miembro
 
Registrado: sep 2004
Ubicación: El Fuerte Sinaloa
Posts: 165
Poder: 20
geovany Va por buen camino
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

Última edición por geovany fecha: 12-03-2005 a las 19:08:57. Razón: falto algo en el codigo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:44:43.


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
Copyright 1996-2007 Club Delphi