FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema con ADO
Hola, estoy empezando con bases de datos bajo delphi y tengo un
problemilla. Tengo una base de datos (bajo mysql) con una tabla que se llama b, con dos campos aa y bb, los 2 de tipo integer. Engancho a la base de datos a traves de ODBC con un ADOConnection. Ahora viene el problema: Tengo 2 botones, uno para añadir registros a la tabla y otro para visualizar el contenido de los registros del campo bb de la tabla: CODIGO PARA VER CONTENIDO DEL CAMPO BB: ----------------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin adoquery1.SQL.Clear; adoquery1.SQL.Add('select bb from b'); adoquery1.Open; for i:=1 to adoquery1.RecordCount do begin listbox1.items.add(inttostr(adoquery1.recordset.fields[0].Value)); adoquery1.Recordset.MoveNext; end; adoquery1.Close; end; CODIGO PARA AÑADIR UN REGISTRO: ----------------------------------------------------------------------------- procedure TForm1.Button2Click(Sender: TObject); begin adoquery1.SQL.Clear; adoquery1.SQL.Add('insert into b values (8,8)'); adoquery1.ExecSQL; adoquery1.Close; end; PROBLEMA: ------------------- Pincho en button2 todas las veces que quiero y funciona perfectamente. A continuacion pincho en button1 y me carga los valores en una lista sin problemas. PERO si ahora pincho de nuevo en button2 me da el mensaje siguiente: ACCESS VIOLATION AT ADDRESS 1F453E6E IN MODULE MSADO15.DLL ¿Que me falta? Salu2. |
#2
|
|||
|
|||
Se me olvidaba, utilizo Delphi 7 y MySQL 4.
Salu2. |
#3
|
||||
|
||||
Quien sabe, quizá por culpa de los campos persistentes, ...
En todo caso, ¿ hay alguna razón para aprovechar tanto un TADOQuery ?. Si simplemente pones 2 TADOQuery, uno para las consultas y otro para las inserciones, te ahorraras este problema. Además te recomiendo que no modifiques el contenido de la propiedad SQL. Simplemente pón consultas parametrizadas. Algo del tipo : Consulta : SELECT * FROM B WHERE FECHA = :FECHA Inserción : INSERT INTO B (CAMPO1, CAMP2) VALUES (:CAMPO1, :CAMPO2) Ahora el código de los botones te quedará : Código:
procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin adoConsulta.Params.ParamValues['FECHA'] := Date; adoConsulta.Open; for i:=1 to adoConsulta.RecordCount do begin listbox1.items.add(adoConsulta.FieldByName('CAMPO1').AsString); adoConsulta.Recordset.MoveNext; end; adoConsulta.Close; end; procedure TForm1.Button2Click(Sender: TObject); begin adoInsercion.Params.ParamValues['CAMPO1'] := 8; adoInsercion.Params.ParamValues['CAMPO2'] := 8; adoInsercion.ExecSQL; end;
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
|
|