PDA

Ver la Versión Completa : rpoblemas en insercion con zQuery


voldemmor
03-03-2008, 16:28:21
Hola amigos, para mi aplicacion utilizo,
Utilizo Mysql 5 + Delphi6 + Zeos 6.0.1, luego de buscar en los foros, llegue a mi codigo




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

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
Hola

Código Delphi [-] (http://www.clubdelphi.com/foros/#)
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
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
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:

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
:Dbueno 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
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


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
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 =)