PDA

Ver la Versión Completa : Cual es la Mejor forma de Agregar,Modificar y Eliminar en ADO ?


LENOCB
05-01-2008, 22:39:37
No se si hay una única forma, porque esta va a hacer la 1º vez que trabaje con bd, jeje, y preguntaba nomás.- por codigo se puede ??.-
saludos

Caral
06-01-2008, 00:23:24
Hola
Por supuesto que se puede, hacer todo lo que quieres con ADO.
Y claro que se puede por codigo, usando sql.
Saludos

LENOCB
06-01-2008, 00:53:07
Hola, tengo estas cosas, en form tengo 2 edit, en uno va el nombre y en el otro un numero;
Código Delphi [-] (http://www.clubdelphi.com/foros/#)agregar:='Insert Into TGrupos (Nombre,Cod_G) Values ('''+Edit1.Text+''', '''StrToInt(Edit2.Text)'')';
FormGrupos.ADOQuery1.SQL.Add(agregar);

y me tira error en el parte StrToInt(Edit2.Text)'')';

que puede ser ?

Delphius
06-01-2008, 00:53:08
No se si hay una única forma, porque esta va a hacer la 1º vez que trabaje con bd, jeje, y preguntaba nomás.- por codigo se puede ??.-
saludos
Hola LENOCB, sería oportuno que profundices y aportes mayores detalles sobre tus dudas...

No se para donde apunta tu pregunta, por lo que la respuesta tampoco sabría decirla.

Si te describes mejor, puede que te aporte una respuesta más certera.

Saludos,

Caral
06-01-2008, 01:06:16
Hola
Bueno, a por otra.

FormGrupos.ADOQuery1.SQL.Text:= 'Insert Into TGrupos (Nombre, Cod_G) Values (:Nombre, :Codigo)';
FormGrupos.ADOQuery1.Parameters.Parambyname('Nombre').Value:= Edit1.Text;
FormGrupos.ADOQuery1.Parameters.Parambyname('Codigo').Value:= StrToInt(Edit2.Text);
FormGrupos.ADOQuery1.ExecSQL;

El uso de parametros puede ser un poco mas de trabajo inicial, al final ayudara mucho, te lo aconsejo.
Saludos

LENOCB
06-01-2008, 01:13:52
que genia, una vez muchas gracias !!!!

LENOCB
06-01-2008, 02:09:28
Hola, ahora antes de agragar tendria que fijarme si ya no existe ese grupo, como se busca con el locate ??

Caral
06-01-2008, 14:47:39
Hola
No crees que cada vez pones menos explicaciones?.
Me parece que es importante toda la informacion que se de, el codigo, la idea que se tenga, etc.
Si eres tan escueto en tus preguntas, dificilmente alguien te podra dar alguna solucion.
Por mi parte, necesito mas informacion.
Que es lo que tienes?
Que quieres hacer?
En que parte del programa?
Saludos

LENOCB
06-01-2008, 14:56:10
sisi, lo que pasa es que voy a mil !!! jeje, bueno, viste el codigo de agregar ?? ese anda de maravillas, ahora lo que quiero antes de agregar, que busque primero si ya existe ese nombre .-

Caral
06-01-2008, 15:15:12
Hola

FormGrupos.ADOQuery1.Active := False;
FormGrupos.ADOQuery1.SQL.Text := 'Select Nombre From TGrupos WHERE Nombre = :Nombre';
FormGrupos.ADOQuery1.Parameters.Parambyname('Nombre').Value:= Edit1.Text;
FormGrupos.ADOQuery1.Active := True;
If Edit1.Text = FormGrupos.ADOQuery1.Fields[0].Value then
MessageDlg('El Nombre ya Existe',mtError,[mbOK],0)
else
FormGrupos.ADOQuery1.Active := False;
FormGrupos.ADOQuery1.SQL.Text:= 'Insert Into TGrupos (Nombre, Cod_G) Values (:Nombre, :Codigo)';
FormGrupos.ADOQuery1.Parameters.Parambyname('Nombre').Value:= Edit1.Text;
FormGrupos.ADOQuery1.Parameters.Parambyname('Codigo').Value:= StrToInt(Edit2.Text);
FormGrupos.ADOQuery1.ExecSQL;

El locate lo uso de vez en cuando tambien, pero en otras consultas.
Saludos

LENOCB
06-01-2008, 15:24:20
muchas gracias Caral, y cuando es conveniente usar el Locate ?

LENOCB
06-01-2008, 16:00:57
Hola, de nuevo, ahora me salta un error ,acá pongo el codigo para que vean:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TFormGrupos.BitBtn1Click(Sender: TObject); //Agrega un Grupo sino está en la Tabla TGrupos.
Var agregar:String;
CO:Integer;
begin //Primero Buscar el Registro para ver si está . Y verifica tambien el codigo
FormGrupos.ADOQuery1.Active := False;
FormGrupos.ADOQuery1.SQL.Text := 'Select Nombre From TGrupos WHERE Nombre = :Nombre';
FormGrupos.ADOQuery1.Parameters.Parambyname('Nombre').Value:= Edit1.Text;
FormGrupos.ADOQuery1.Active := True;
If Edit1.Text = FormGrupos.ADOQuery1.Fields[0].Value then begin MessageDlg('El Grupo : '+Edit1.Text+' ya Existe ',mtError,[mbOK],0);
Edit1.text:='';
Edit1.SetFocus;
end else begin //Ahora me fijo el Código si ya existe.
//FormGrupos.ADOQuery1.SQL.Clear;
FormGrupos.ADOQuery1.Active := False;
FormGrupos.ADOQuery1.SQL.Text:= 'Select Cod_G TGrupos From TGrupos Where Cod_G = :Cod_G';
FormGrupos.ADOQuery1.Parameters.Parambyname('Cod_G').Value:= StrToInt(Edit2.Text);
FormGrupos.ADOQuery1.Active:=true;
If (StrToInt(Edit2.Text)) = FormGrupos.ADOQuery1.Fields[0].Value Then begin MessageDlg('El Código: '+Edit2.Text+', ya existe', mtError,[mbOk],0); Edit2.Text:='';
Edit2.SetFocus;
end else //Esta todo bien entonces agrego.
begin FormGrupos.ADOQuery1.Active := False; FormGrupos.ADOQuery1.SQL.Text:= 'Insert Into TGrupos (Nombre, Cod_G) Values (:Nombre, :Codigo)';
FormGrupos.ADOQuery1.Parameters.Parambyname('Nombre').Value:= Edit1.Text;
FormGrupos.ADOQuery1.Parameters.Parambyname('Codigo').Value:= StrToInt(Edit2.Text);
FormGrupos.ADOQuery1.ExecSQL;
end;
end;


y lo que esta en verde ,me tira error :"Error de sintaxis (falta operador) en la expresion de cunsulta Cod_G TGrupos"

Caral
06-01-2008, 16:11:01
Hola
No veo ningun error de sintaxis, puede ser que que campo no sea como lo planteas.
Prueba asi:

FormGrupos.ADOQuery1.SQL.Text:= 'Select Cod_G TGrupos From TGrupos Where Cod_G = :Cod';
FormGrupos.ADOQuery1.Parameters.Parambyname('Cod').Value:= Edit2.Text;
Saludos

Caral
06-01-2008, 16:24:06
Hola
Cuando hay alguna duda de lo que envia o como lo envia la consulta es bueno generar un mensaje, asi veras exactamente donde esta el error.
Algo asi:

FormGrupos.ADOQuery1.SQL.Text:= 'Select Cod_G TGrupos From TGrupos Where Cod_G = :Cod';
FormGrupos.ADOQuery1.Parameters.Parambyname('Cod').Value:= Edit2.Text;
Showmessage(FormGrupos.ADOQuery1.SQL.Text);
Antes de abrir o activar el query.
Si la consulta esta mal hecha o no coinciden los datos, los veras facilmente.
Saludos

LENOCB
06-01-2008, 16:57:53
ya solucione el error, esta poniendo Select Cod_G TGrupos (cuando TGrupos no es un campo de la tabla , sino la tabla misma) jeje, ahora me sale otro error: " No se han especificados algunos valores para alguno de los parametros solicitados" , el error lo tira en el mismo lugar donde lo tiró antes

Caral
06-01-2008, 17:07:59
Hola
La logica del mensaje es:
No has puesto nada en el edit2.??:confused:
Parametros???????:confused:
Cuales tienes, ya los ves????, as especificado los parametros???.:confused:
La computación (vista desde el punto de vista de este Novato) es logica.;)
Hay cosas amigo en las que no se pude ayudar, hay que buscarlas en el programa, tratar de analizarlas y buscarle la solucion.
Siento que si sigo haciéndote la tarea no te estoy haciendo ningún favor, no vas a aprender la lógica de la programación.
No digo que no te quiera ayudar, digo que tienes que caminar un poco solo, asi vas a aprender mas.
Busca el problema, la lógica del mismo y si después de eso no puedes solucionarlo entonces llama a un exorcista.:D:D o bien este Novato tratara de ver como te ayuda.:D;)
Saludos

LENOCB
06-01-2008, 17:19:27
no se, es mas puse un edit mas para poner ahí lo que me devolvia la consulta y me tira el mismo error, y el edit2 tiene el numero (el cod) que uso para hacer la consulta, hasta intenté hacer otro adoquery2, para que no sea al mismo adoquery1, y me sigue tirando el mismo error :rolleyes::rolleyes:

Caral
06-01-2008, 17:28:28
Hola
Codigo amigo, codigo.
As cambiado algo?, donde?, que?.
Saludos

LENOCB
06-01-2008, 17:38:15
Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TFormGrupos.Edit1Exit(Sender: TObject);
begin //Si el Campo del Nombre no está completo salta un error.
If (Edit1.Text='')then begin MessageDlg('Este Campo debe completarse ',mtError,[mbOk],0);
Edit1.SetFocus;
end;
end;

procedure TFormGrupos.BitBtn1Click(Sender: TObject); //Agrega un Grupo sino está en la Tabla TGrupos.
Var agregar:String;
CO:Integer;
begin //Primero Buscar el Registro para ver si está . Y verifica tambien el codigo
FormGrupos.ADOQuery1.Active := False;
FormGrupos.ADOQuery1.SQL.Text := 'Select Nombre From TGrupos WHERE Nombre = :Nombre';
FormGrupos.ADOQuery1.Parameters.Parambyname('Nombre').Value:= Edit1.Text;
FormGrupos.ADOQuery1.Active := True;
If Edit1.Text = FormGrupos.ADOQuery1.Fields[0].Value then begin MessageDlg('El Grupo : '+Edit1.Text+' ya Existe ',mtError,[mbOK],0);
Edit1.text:='';
Edit1.SetFocus;
end else begin //Ahora me fijo el Código si ya existe.
//FormGrupos.ADOQuery1.SQL.Clear;
//FormGrupos.ADOQuery1.Active := False;
FormGrupos.ADOQuery1.SQL.Text:= 'Select Cod_G From TGrupos Where Cod_G = :Cod';
FormGrupos.ADOQuery1.Parameters.Parambyname('Cod').Value:=StrToInt(FormGrupos.Edit2.Text);
FormGrupos.ADOQuery1.Active:=true;
If StrToInt(Edit2.text) = FormGrupos.ADOQuery1.Fields[0].Value Then begin MessageDlg('El Código: '+Edit2.Text+', ya existe', mtError,[mbOk],0);
Edit2.Text:='';
Edit2.SetFocus;
end else //Esta todo bien entonces agrego.
begin FormGrupos.ADOQuery1.Active := False; FormGrupos.ADOQuery1.SQL.Text:= 'Insert Into TGrupos (Nombre, Cod_G) Values (:Nombre, :Codigo)';
FormGrupos.ADOQuery1.Parameters.Parambyname('Nombre').Value:= Edit1.Text;
FormGrupos.ADOQuery1.Parameters.Parambyname('Codigo').Value:= StrToInt(Edit2.Text);
FormGrupos.ADOQuery1.ExecSQL;
end;
end;


he probado mandandole el numero directo es decir :
FormGrupos.ADOQuery1.Parameters.Parambyname('Cod').Value:= 4
por ejemplo y salta el mismo error

Caral
06-01-2008, 17:58:12
Hola
No veo el error
Por que esto:
StrToInt(FormGrupos.Edit2.Text);
Cual es el form FormGrupos??
Donde esta el edit2 ?? esta en el mismo form?
Pusiste un mensaje donde te indique para saber que datos envia?
Saludos

LENOCB
06-01-2008, 18:02:59
el formgrupos es en donde estan el edit1 (referncia al nombre), tengo el edit2 (referencia al codigo), y 2 botones, uno de aceptar y otro de canclar
lo raro es que cuando busco por el nombre del grupo lo hace barbaro y sin ningun problema, ahora cuando lo buca por el codigo del grupo salta ese error ;

Caral
06-01-2008, 18:08:25
Hola
El campo del codigo de que tipo es?
Pareciera numerico, es asi?.
Saludos

LENOCB
06-01-2008, 18:11:57
si en la tabla de acces esta el campo Nombre (Texto) y el campo Cod_G (Numerico)

Caral
06-01-2008, 18:20:05
Hola
Veamos asi:

FormGrupos.ADOQuery1.SQL.Text:= 'Select Cod_G From TGrupos Where Cod_G = :Cod';
FormGrupos.ADOQuery1.Parameters[0].Value:= Edit2.Text;
FormGrupos.ADOQuery1.Active:=true;
o asi:

FormGrupos.ADOQuery1.SQL.Text:= 'Select Cod_G From TGrupos Where Cod_G = :Cod';
FormGrupos.ADOQuery1.Parameters[0].Value:=QuotedStr(Edit2.Text);
FormGrupos.ADOQuery1.Active:=true;
Saludos

LENOCB
06-01-2008, 18:26:44
hola
el error sale cuando hago :
FormGrupos.ADOQuery1.Active:=True;

con respecto a las 2 soluciones es le mismo, en la 1º sale ese mismo error, en la segunda con el squared(edit2.text), sale un error que dice que la aplicacion no trabaja con ese formato o algo así !!!!

Caral
06-01-2008, 18:30:18
Hola
Es muy grande el programa y la base de datos?
Si no lo son, ponlos en un adjunto y lo reviso.
Vas a avanzado, presionas gestionar archivos adjuntos, lo buscas y lo colocas.
Seria bueno colocarlos en un zip, ocuparan menos espacio.
Saludos

LENOCB
06-01-2008, 18:36:51
Hola
no es tan grande, fijate que para entrar al sistema, hay que poner una clave, esa clave es (pepe) jeje !!!
no me deja subirlo pesa solo 400k !!! no tiene email ?

Caral
06-01-2008, 18:38:46
Hola
Pon la base de datos en un zip y el programa en otro, si el programa es grande quitale el exe que es lo que mas pesa, yo lo trato de compilar aqui.
Saludos

LENOCB
06-01-2008, 18:42:41
aca va la base de datos

LENOCB
06-01-2008, 18:45:07
y ahora no me deja subir el programa !!! dice que me execedi el limite

Caral
06-01-2008, 18:47:26
Partelo en varios pedazos
Si son varios form, pon unos en un zip y otros en otro, acuerdate de quitarle el exe asi pesara menos
Saludos

LENOCB
06-01-2008, 18:59:51
falta una parte , porque dice que me pase por 4,5 kb jeje

Caral
06-01-2008, 19:04:11
Hola
Ya tengo estos
Arriba hay en la franja azul ahy un titulo que dice USER CP
Presionalo, vas a entrar en tu perfil
Al lado izquierdo hay varias opciones, al final veras archivos adjuntos
presionala y eliminas los que hay, esto te dara el espacio que necesitas
Luego envia los que faltan
En la tarde lo reviso, voy a almorzar.
Saludos

LENOCB
06-01-2008, 19:11:15
Hola
Muchas Gracias por la ayuda !! de donde sos ?? yo soy de Argentina y aca son las 4:13 hs de la tarde, te lo pregunto porque que me quede sorprendido porque que te ivas a almorzar , jeje
bueno acá va la ultima tanda ....

LENOCB
06-01-2008, 22:46:28
Hola
Gracias a dios lo puse lograr, el problema era en la bd, el campo al final era un autoincremental, borre la tabla y la hice de nuevo y lo setee como numerico y funciona al pelo .....

Caral
06-01-2008, 23:05:36
Hola
El problema esta muy facil de solucionar, el campo no se llama como lo tienes, revisalo.

Var
agregar:String;
Co:Integer;
begin
//Primero Buscar el Registro para ver si está . Y verifica tambien el codigo
FormGrupos.ADOQuery1.Active := False;
FormGrupos.ADOQuery1.SQL.Text := 'Select Nombre From TGrupos WHERE Nombre = :Nombre';
FormGrupos.ADOQuery1.Parameters.Parambyname('Nombre').Value:= Edit1.Text;
FormGrupos.ADOQuery1.Active := True;
If Edit1.Text = FormGrupos.ADOQuery1.Fields[0].Value then begin
MessageDlg('El Grupo : '+Edit1.Text+' ya Existe ',mtError,[mbOK],0);
Edit1.text:='';
Edit1.SetFocus;
end
else begin
//Ahora me fijo el Código si ya existe.
FormGrupos.ADOQuery1.SQL.Clear;
FormGrupos.ADOQuery1.Active := False;
FormGrupos.ADOQuery1.SQL.Text:= 'Select Codigo_G From TGrupos Where Codigo_G = :Cod';
FormGrupos.ADOQuery1.Parameters.Parambyname('Cod').Value:= Edit2.Text;
FormGrupos.ADOQuery1.Active:=true;
If Edit2.Text = FormGrupos.ADOQuery1.Fields[0].Value Then begin
MessageDlg('El Código: '+Edit2.Text+', ya existe', mtError,[mbOk],0);
Edit2.Text:='';
Edit2.SetFocus;
end

else //Esta todo bien entonces agrego.
begin
FormGrupos.ADOQuery1.Active := False;
FormGrupos.ADOQuery1.SQL.Text:= 'Insert Into TGrupos (Nombre, Codigo_G) Values (:Nombre, :Codigo)';
FormGrupos.ADOQuery1.Parameters.Parambyname('Nombre').Value:= Edit1.Text;
FormGrupos.ADOQuery1.Parameters.Parambyname('Codigo').Value:= StrToInt(Edit2.Text);
FormGrupos.ADOQuery1.ExecSQL;
Showmessage('El Grupo se inserto bien');

end;
end;
En algun momento le cambiaste el nombre.
Estoy viendo el programita, quieres algo mas?
Saludos

LENOCB
06-01-2008, 23:36:01
Hola, sisi gracias, ahora estoy en la parte de modificacion del grupo ...
en un form tengo un dbcombobox, un edit para el nombre del grupo y otro para la contraseña, la cosa es así, hago una consulta que me llene el dbcombobox, para que puede elegir el nombre del grupo a modificar, cuando lo encuentra, en el evento onclick del dbcombobox, copio lo seleccionado en el edit que edita el nombre del campo, ahora bien, yo quiero que ahora, me aparezca en el otro edit (que el setea el codigo), el codigo correspondiente a ese nombre del grupo, me explico ?

Caral
06-01-2008, 23:39:58
Hola
No se si sera una tarea, pero en casos de modificacion, edicion y borrado, el componente DBNavigator lo hace solo, sin codigo ni nada.
Por que usar algo mas?
Me lo explicas.
Saludos

LENOCB
06-01-2008, 23:44:37
porque me gusta más los botones jeje, para mi queda un poco mejor a la vista:D,

Caral
06-01-2008, 23:49:45
Hola
Bueno no entiendo bien.
Tienes un combobox, en este vas a poner el numbre del grupo (sacado de la tabla).
Tienes un edit (nombre nuevo)
otro edit (codigo nuevo).
Y luego lo cambias con un boton.
Es asi?
Saludos

LENOCB
06-01-2008, 23:53:27
Hola
exacto, la parte de llenado del dbcombobox ya esta, tambien esta la parte en donde de lo seleccionado en el dbcombobox lo pongo en el edit (para cambiar el nombre), ahora, quiero que en el otro edit (en el del codigo), a medida que voy eligiendo el nombre, ponga en el edit (en el del codigo), el codigo que le pertenece a ese nombre seleccionado

Caral
07-01-2008, 00:32:02
Hola
Bueno me pusiste a trabajar y en domingo, vergüenza debería darte.:D
Le hice unas modificaciones, espero te gusten.
No me quise meter muy a fondo para dejar que sigas.
Aqui va completo, ya inserta, modifica y borra, con botoncitos como te gusta.:D
Saludos

LENOCB
07-01-2008, 00:51:44
Hola
Bueno gracias por toda la ayuda , pero sigo sin saber como hacer que se me aparezca el codigo que corresponde al nombre seleccionado, no se como rescatar ese codigo, soy terrible cabeza dura jeje

Caral
07-01-2008, 01:01:22
Hola
Un regalo mas.
Tenemos un combobox en el form de grupos, este se usa cuando se modifica o se borra (viste que bonito como cambia el titulo del boton :D).
Presiona el combobox en el evento onChage de este pones esto asi:

QTemp.SQL.Text:= 'Select Nombre, Codigo_G from TGrupos where Nombre = :Nom';
QTemp.Parameters[0].Value:= ComboBox1.Text;
QTemp.Open;
Edit1.Text:= QTemp.Fields[0].Value;
Edit2.Text:= IntToStr(QTemp.Fields[1].Value);
Segun cambies de nombre en el combobox, apareceran, tanto el nombre como el codigo.
Saludos

Caral
07-01-2008, 01:07:07
Hola
Todo va relacionado a:
Archivos
Parametros
Componentes
Todo se relaciona, observa bien como se ligan las cosas, delphi lo hace casi todo y te indica si corresponde o no lo que estas haciendo.
Paciencia y una caña.
Saludos

LENOCB
07-01-2008, 01:29:45
Hola
yo lo hago continuando el mi modelo y me tira error de los parammetros.... lo que sigo es así:
en el form de modificar tengo el combobox los 2 edit y los 2 botones ...
en el onActivate del form hago que me cargue el combobox , y despues en el onChange del combobox hago la misma consulta que haces vos, pero a mi no me sale :mad::mad::mad::mad: , jejeje

LENOCB
07-01-2008, 01:51:34
No Hay Forma No Da Pie Con Bola Esto :(:(:(:(

LENOCB
07-01-2008, 02:01:15
Hola
jeje ya estaba, estaba mal la consulta, porque en el select hacia Nombre y Codigo_G, y en acces estaba Cod_G .... :D:D:D:D
bien de boludo lo mio :D:D

Delphius
07-01-2008, 02:10:55
LENOCB, De argentino a argentino... ¡No seas tan atropellado!:D
Hazlo con calma, no te apures... ni desesperes... he visto como fue evolucionando el hilo... y en pocas horas se ha dicho mucho...

Me parece fantástica la ayuda que te dio el buen amigo Caral, le debes unos pesitos:D

Si te estás metiendo en esto de la programación (por lo que parece) te doy un consejo: cuando la cabeza no funca, se hace otra cosa. Despeja tu mente... sal afuera, respira ondo... ve a algún lugar abierto y despejado, que tenga verde... Y si no hay nadie cerca pega un grito. No dejes que el stress te domine (y te lo dice alguien que ha sufrido y sufre de eso).

También puedes visitar la wiki (http://wiki.clubdelphi.com/). Allí encontrarás ejemplos.
Y en el FTP (http://www.terawiki.clubdelphi.com/) del club podrás encontrar un buen libro que recomiendo mucho: la cara oculta de delphi 4. Que no te asuste la versión, los conceptos no han variado.

Saludos, Y a no desesperarse!

LENOCB
07-01-2008, 02:41:21
Si, jeje me apuro demasiado :D:D:D, lo que pasa es que hace poco en la facultad (UNLP = Universidad Nacional de La Plata), nos eseñaron Delphi, pero no con bases de datos, sino con tablas planas nada más, y queria ver como era trabajar con bases de datos en delphi .- :D:D:D

jachguate
07-01-2008, 04:04:47
pero no con bases de datos, sino con tablas planas nada más, y queria ver como era trabajar con bases de datos en delphi .- :D:D:D

Pues habrá que revisar que aprendiste de "tablas planas"... pero me atrevo a decir que la principal diferencia entre trabajar con un servidor remoto y con tablas locales (tipo paradox, access) es el cuidado que debe ponerse en la cantidad de información que se hace viajar del servidor al cliente, lo que normalmente implica el uso de lenguaje SQL.

En cuanto al uso de controles asociados a datos (dbGrid, dbEdit, dbComboBox, dbNavigator, etc) es perfectamente viable realizar una aplicación utilizándolos de la misma manera que se haría con las tablas planas.

Hasta luego.

;)