Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   rpoblemas en insercion con zQuery (https://www.clubdelphi.com/foros/showthread.php?t=53859)

voldemmor 03-03-2008 16:28:21

rpoblemas en insercion con zQuery
 
Hola amigos, para mi aplicacion utilizo,
Utilizo Mysql 5 + Delphi6 + Zeos 6.0.1, luego de buscar en los foros, llegue a mi codigo



Código Delphi [-]
 
procedure TfrmAlumnos.IngresaAlumno();
var sql:string;
begin
sql := 'INSERT INTO estudiantes'+
' (nombres,apellidos,ci,sexo,fecha_nacimiento,lugar_nacimiento,telefono,direccion,padre,madre,ocupacio  n_padre,ocupacion_madre,estado,cod_colegio)'+
' VALUES (:nombres,:apellidos,:ci,:sexo,:fecha_nacimiento,:lugar_nacimiento,:telefono,:direccion,:padre,:madr  e,:ocupacion_padre,:ocupacion_madre,:estado,:cod_colegio)';
with AcademicData.ZQuery1 do
begin
SQL.Add('sql');
ParamByName('nombres').AsString:= txtNombre.Text;
ParamByName('apellidos').AsString:= txtApellido.Text;
ParamByName('ci').AsString:= txtNombre.Text;
if(cbxSexo.Text = 'HOMBRE')then
ParamByName('sexo').AsString:= 'H'
else ParamByName('sexo').AsString:= 'F';
ParamByName('fecha_nacimiento').AsDate:= dateFechaNac.Date;
ParamByName('lugar_nacimiento').AsString:= txtLugarNac.Text;
ParamByName('telefono').AsString:= txtTelefono.Text;
ParamByName('direccion').AsString:= txtDireccion.Text;
ParamByName('padre').AsString:= txtPadre.Text;
ParamByName('madre').AsString:= txtMadre.Text;
ParamByName('ocupacion_padre').AsString:= txtOcupPadre.Text;
ParamByName('ocupacion_madre').AsString:= txtOcupMadre.Text;
ParamByName('estado').AsString:= 'ACTIVO';
ParamByName('cod_colegio').AsInteger:= 1;
ExecSQL;
First;
SQL.Clear;
Close;
end;
end ;






peproesta insercion me da un error, Access violation at address 0057A3D8 in module 'Academic.exe'.Read of address 00000304

Y la verdad no se en que estoy fallando.

Agradeceria su ayuda

Caral 03-03-2008 16:50:09

Hola
Código Delphi [-]
with AcademicData.ZQuery1 do
begin
SQL.Clear;
SQL.Add('sql');
// lo que sigue
ExecSQL;
First; // para que?
SQL.Clear; // no hace falta
Close;
Saludos

voldemmor 03-03-2008 16:56:22

ok lo voy y lo pruevo
 
Cita:

Empezado por Caral (Mensaje 270303)
Hola

Código Delphi [-]
with AcademicData.ZQuery1 do
begin
SQL.Clear;
SQL.Add('sql');
// lo que sigue
ExecSQL;
First; // para que?
SQL.Clear; // no hace falta
Close;
Saludos

Ok caral voy a probarlo lo mas rapido posible y hos comentoque sucedio

voldemmor 04-03-2008 14:27:13

parece que no se escribe la sentencia
 
Bueno ya realice los cambios y con más tiempo me puse a depurar, pero me sigue dando el problema, al parecer es en el momneto de asignar la sentencia sql (no lo hace), y luego me da el error de acceso.
Intente escribir la sentencia directamente sobre el zQuery pero el resultado es el mismo.

eduarcol 04-03-2008 14:49:47

Ese error casualmente me dio por primera vez hace dos dias, luego de probar y depurar me di cuenta que era error en la construccion del Query.

Asi ha vista de pajaro el parametro madre, esta mal escrito, pero habria que ver si los tipos coinciden

Lepe 04-03-2008 15:56:39

Cita:

Empezado por Caral
SQL.Clear; // no hace falta

Posiblemente sea un sql que ejecuta varias veces, por eso al final lo limpia, para que en la próxima ejecución el sql esté vacío.


Te aconsejo esta forma:
Código Delphi [-]
with AcademicData.ZQuery1 do
begin
  if not Prepared then 
    Prepare;
   
  // dar valores a los parámetros
   ExecSql;
end;
- El sql lo dejas escrito en tiempo de diseño.
- La primera vez que se ejecute, compilará la sentencia sql (Prepare), de forma que las siguientes veces que se ejecute, no hay que chequear la sintaxis.

Saludos

luisgutierrezb 04-03-2008 15:56:54

bueno yo veo este error:

SQL.Add('sql');

creo que lo correcto debe ser:

SQL.Add(sql);

eduarcol 04-03-2008 16:40:09

:D
Cita:

Empezado por luisgutierrezb (Mensaje 270510)
bueno yo veo este error:

SQL.Add('sql');

creo que lo correcto debe ser:

SQL.Add(sql);

Listo, solucion al problema, :D

voldemmor 04-03-2008 20:28:28

no aun no
 
la verdad si note ese error(sql.add('sql')) luego de dejar la pregunta en el foro.
Pero la verdad no es esa la razon. voy a probar con los parametros

eduarcol 04-03-2008 20:36:34

no es la razon?? :confused:, si en ningun momento le has asignado la instruccion al componente, porq no colocas el codigo tal cual lo tienes en el formulario?

Caral 04-03-2008 21:12:14

Hola
Pues no se si ayudara, pero por lo menos lo afino un poco.:D
Código Delphi [-]
 
procedure TfrmAlumnos.IngresaAlumno();
var Sex: string;
begin
 
 if (cbxSexo.Text = '') then
 Showmessage('Que¡¡¡, No tiene sexo?')
 else
 if (cbxSexo.Text = 'HOMBRE') then
 Sex:= 'M'
 else
 Sex:= 'F';

with AcademicData.ZQuery1 do
begin
sql.Text := 'INSERT INTO estudiantes'+
'(nombres,apellidos,ci,sexo,fecha_nacimiento,lugar_nacimiento,telefono,direccion,padre,madre,ocupaci  o  n_padre,ocupacion_madre,estado,cod_colegio)'+
' VALUES (:nombres,:apellidos,:ci,:sexo,:fecha_nacimiento,:lugar_nacimiento,:telefono,:direccion,adre,:madr  e,cupacion_padre,cupacion_madre,:estado,:cod_colegio)';

ParamByName('nombres').AsString:= txtNombre.Text;
ParamByName('apellidos').AsString:= txtApellido.Text;
ParamByName('ci').AsString:= txtNombre.Text;
ParamByName('sexo').AsString:= Sex;
ParamByName('fecha_nacimiento').AsDate:= dateFechaNac.Date;
ParamByName('lugar_nacimiento').AsString:= txtLugarNac.Text;
ParamByName('telefono').AsString:= txtTelefono.Text;
ParamByName('direccion').AsString:= txtDireccion.Text;
ParamByName('padre').AsString:= txtPadre.Text;
ParamByName('madre').AsString:= txtMadre.Text;
ParamByName('ocupacion_padre').AsString:= txtOcupPadre.Text;
ParamByName('ocupacion_madre').AsString:= txtOcupMadre.Text;
ParamByName('estado').AsString:= 'ACTIVO';
ParamByName('cod_colegio').AsInteger:= 1;
ExecSQL;
Close;
end;
end ;
Saludos

voldemmor 06-03-2008 20:50:55

Hay los :
 
Bueno amigos cuando una mas esta de apuro es cuando más deja de ver cosas tal fundamentales como (dos puntos) parametro.

Gracias chicos,
eduarcol tenias razon sobre los parametros, mi error, me he comido los : (dos puntos), y que dificil es darce cuenta de esos detalles tan peques
Gracias caral por darle mejor pinta al codigo =)


La franja horaria es GMT +2. Ahora son las 21:05:03.

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