Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   URGENTE!!! Me Manda un error al llenar un combobox (https://www.clubdelphi.com/foros/showthread.php?t=39246)

chetos7 14-01-2007 23:45:06

URGENTE!!! Me Manda un error al llenar un combobox
 
Hola, tengo un problemon y no se como resolverlo. Lo que pasa es que estoy haciendo un proyecto de una biblioteca, manejo base de datos en sql. Asi estan las cosas: yo tengo que llenar un combobox con una tabla, pero la tabla puede tener registros repetidos, siendo mas exacto, tengo una tabla de libros, donde tiene titulo,autor, etc, y tengo que llenar un combobox ya sea con los titulos de libro o autor, la decision sera a traves de un radiobutton, cuando doy clic al radiobutton1, se llena con los titulos del libro, si cambio al radiobutton2, se llena con los autores de todos los libros, pero mi problema es que al darle clic a un radiobutton si se llena bien, pero al cambiar de radiotbutton me manda un error, el cual es:
Project bibliteca.exe raised exception class EAAccessViolation with message 'Access violation en address 1F453E7E in module 'masado.15dll. Write of address 00CC7014'. Process stopped. Use step or run to continue.
El mismo error me aparece en otra forma en la cual en el evento onactivate le pong que me llene otro combobox, pero ahora, solo con los diferentes titulos, y en el primer registro si lo hace bien, pero como puedo hacer mas de un registro continue en esa forma, me manda el mismo error.
Asi lleno mi combo box:
modulodedatos.FiltradoLA;
modulodedatos.ADOQuery2.Open;
modulodedatos.ADOQuery2.First;
ComboBox1.Items.Clear;
while not modulodedatos.ADOQuery2.Eof do
begin
ComboBox1.Items.Add(modulodedatos.ADOQuery2['Autor1']);
modulodedatos.ADOQuery2.Next;
end;
modulodedatos.ADOQuery2.Close;
Y el codigo de FiltradoLa es el siguiente:
ADOQUERY2.SQL.Clear;
ADOQUERY2.SQL.Add('select distinct Autor1 from libros order by Autor1');
ADOQUERY2.ExecSQL;
Si alguien me puede ayudar, se los agradeceria profundamente.
Ah, otra cosa, ya aprovechando, otro problema es que en mi base de datos tengo los datos de libro, pero la materia la manejo con un id, con el cual saco el nombre de lamateria con otra tabla llamada materia, pero al mostrar los datos en un dbgrid del libro, pues me pone el id de materia, pero yo quiero poner el nombre de la materia, seria algo asi, como conectar dos tablas y sustituir el idmateria por su materia, Espero haberme explicado bien.
Perdon si es algo muy largo y aburmador, pero no se que hacer y esto lo tengo que entregar el martes 17 de enero, asi que veran que estoy muy desesperado. Les agradezco de antemano

Bicho 15-01-2007 00:13:24

Hola, antetodo bienvenido al ClubDelphi.

Por favor, leete la Guía de Estilo y entenderás que no debes repetir los hilos (no ayuda en nada, sólo conseguirás que se te recrimine por parte de un moderador y te cierren el hilo), poner títulos descriptivos y no usar palabras como "urgente" porque no ayudan en posteriores búsquedas si alguien más tiene el mismo problema que tú.
No hacer distintas preguntas en el mismo hilo por la misma razón que antes. Y usar las etiquetas para envolver el código para mejorar la legibilidad.

A bote pronto, referente a tu problema, es que, tras rellenar la propiedad Add (o text) del AdoQuery, llamas al método ExecSQL y luego al Open. Es un error muy frecuente, por lo que veo.
ExecSQL, sólo debes usarlo cuando la Query que vayas a ejecutar no sea una Select, es decir, cualquier otra: Insert, Delete, Update, Drop, Create, etc.
Además nunca usas en combinación con Open o Active := True, porque puede que te de problemas.
En cambio el metodo Open o la propiedad Active := True (son equivalentes los dos, pero sólo debes usar uno a la vez), son los que activan la query en caso que esta sea una consulta (SELECT).

No se si esto, te soluciona el problema, pero con el código que nos has dado es lo único que veo, a simple vista.

Tú segundo problema puedes probar con la siguiente select, substituyendo los nombres con los de tus tablas.

Código SQL [-]
 select materia.nombre
   from datos_libro, materia
 where materia.id = datos_libro.id
 //así conectas las dos tablas por el id y consigues el nombre. Esta selec la debes poner en la Query que conectes al DataSource que está conectado a su vez con el DBGrid, así te mostrará el nombre de la materia.

Espero te sirva.

Saludos

chetos7 15-01-2007 00:29:52

Muchas Muchas gracias
 
antes que nada, pido disculpas pero era mi primer mensaje en el foro, y pues no sabia nada de no repetir tema ni poner urgente ni nada de eso, lo siento...era miprimera vez, jeje :) .
Ahora, te lo super mega agradezco, casi lloro de alegria (jeje) porque tenia ya mas de una semana con ese maldito problema y pues tengo la presion de que esta tarea era para el martes.
Lo otro, apenas lo voy a intentar, pero lo del combobox funciona super bien.
Michas gracias
y para la proxima, no cometere los mismos errores al insertar nuevo tema

chetos7 15-01-2007 00:35:27

Otra vez...perdon
 
Que onda, mira, ya le quite eladoquery2.execsql
y todavia me manda el error, aunque "dura un poco mas " sin mandarlo, pero igual lo manda

chetos7 15-01-2007 02:04:05

Ahora si!!!
 
Ya verifique y el error era por otra consulta que hacia donde tambien ejecuatab el query, lo cual ya se lo quiete y si funciona, muchras gracias otra vez.
Por otra parte, ya probe mi segunda duda, y tambien esta tod perfecto.
Gracias, gracias


La franja horaria es GMT +2. Ahora son las 04:14:11.

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