 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Lucy Ens

Registrado: 06 Nov 2002Mensajes: 28
|
Publicado: Vie 15 Nov, 2002 12:43 am Asunto: Problemas con DBLookupListBox ySQL |
|
|
Saludos a todos los del foro.
Estoy haciendo una aplicacion enla que tengo un DBLookupListBox, en la propiedad datasource, tiene el datasource del query que ocupo. Pero quiero que este ordenado alfabéticamente, lo hice con el siguiente codigo:
QueryClientes->Close();
QueryClientes->SQL->Clear();
QueryClientes->SQL->Add("select * from tClientes orcder by NomCli asc");
QueryClientes->Open();
pero al ejecutar la aplicación me sale un error que dice:
"Acces violaton at Addres 405C4E7E in Module VCLDB50.BPL..."
Creanme que lo pense mucho y busque de todas formas encontrar el origen de este error.
Por Favor ayúdenme!!!!!!! Estoy desesperada
Gracias por su atención y pronta respuesta |
|
| Volver arriba |
|
 |
DesaSoftware Invitado
|
Publicado: Vie 15 Nov, 2002 6:28 am Asunto: |
|
|
| esta bien escrito "orcder"? y elimina el asc |
|
| Volver arriba |
|
 |
mgf Invitado
|
Publicado: Vie 15 Nov, 2002 8:48 am Asunto: |
|
|
Supongo que el DataSource del que tira tu Query lo tines asociado al compo por la propiedad ListSource del mismo y no por la DataSource.
No sé si será eso.
Tendrás que poner además del ListSource, el ListField y el KeyField.
En principio la consulta no debería darte problemas.
suerte!! |
|
| Volver arriba |
|
 |
Lucy Ens

Registrado: 06 Nov 2002Mensajes: 28
|
Publicado: Vie 15 Nov, 2002 11:56 pm Asunto: DBLookupListBox y Query |
|
|
Gracias por la contestación, a DesaSoftware le contesto que lo de order fue error de dedo
y a mgf le digo que, el query lo tengo asociado al campo por la propiedad Listsource, y tambien tengo asignado el listfield y el key field, pero nada
En fin lo que quiero hacer es tener un formulario de catalogo de empleados, donde se pueda agregar, modificar, eliminar, consultar, datos de los empleados, lo pretendo hacer, poniendo un DBLookupListBox, que muestre los nombres de los empleados, varios DBEdit, y botones (no DBNavigator) para agregar, editar,eliminar, grabar, o cancelar.
La propiedad ListSource del DBlookupListBox y la propiedad Datasource de los DBEdit tienen el mismo datasource que es el datasource del Query. Como ya mencione la consulta para que rellene el DBLookupListBox es:
| Código: | Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("Select * From tEmpleados ORDER BY NomTrab ASC");
Query1->Open(); |
pero me manda el error que ya mencione.
Si ignoro el código anterior para que ya no ordene y trato de agregar registros mediante el siguiente código:
| Código: | void __fastcall TForm1::Button1Click(TObject *Sender)
{
Query1->Insert();
} |
me sale un error que dice que el Query no puede escribir en un Dataset de sólo lectura, pero en la propiedad ReadOnly de los componentes que ocupo estan en false.
¿Qué hago? ¿Aguien sabe en donde está mi error? O me pueden dar alguna referencia para que mi formulario funcione.
Agradecere mucho que me puedan ayudar, por adelantado agradezco la atención prestada y pido disculpas por las molestias
Ahh se me olvidaba decir (aunque creo que es obvio) que no tengo mucha experiencia con Query  |
|
| Volver arriba |
|
 |
TOÑO Master

Registrado: 26 Ago 2002Mensajes: 223Ubicación: Madrid - España -
|
Publicado: Lun 18 Nov, 2002 1:43 pm Asunto: |
|
|
HOLA:
Bueno, el 1º error, comprueba si antes de abrir la nueva Query, no tienes creados campos calculados, tambien tienes que comprobar el orden de creacion de los componentes (Esto solo si el problema no viene en ejecucion).
2º El segundo "" ERROR"" , lo puedes solucionar si en la propiedad
TQuery ->RequestLive = true;
Pero no es un error, no me cansare de decir , que TQuery no debe usarse para actualizar datos, solo debe usarse para leer datos, (existen miles de hojas escritas sobre el porque, asi que no me explayare).
Nota: No creo que el primer error este en la sintaxsis de la query.
By. |
|
| Volver arriba |
|
 |
Lucy Ens

Registrado: 06 Nov 2002Mensajes: 28
|
Publicado: Lun 18 Nov, 2002 6:34 pm Asunto: |
|
|
Gracias por la Respuesta y recomendacion Toño
Pero te digo que la propiedad RequestLive está como dices y aun así no me deja escribir pero bueno, siguiendo tu recomendación, ya no voy a ocupar TQuery para actualizar te explico que es lo que intento hacer para que mi formulario funcione:
El DBLookupListBox, sigue igual, pero ahora tengo un conjunto de DBEdits, los cuales en su propiedad datasource, tienen el datasource del Query, esto para que el usuario vea los datos actuales, y aparte tengo otro conjunto de DBEdits, los cuales en su propiedad datasource, tienen el dataource de la tabla (tClientes). este conjunto para que el usuario modifique los datos que quiera.Pues bien este es el codigo del boton Editar
| Código: | void __fastcall TfClientes::BitBtn2Click(TObject *Sender)
{
Edit1->Text="ClaveCli='"+DataModule1->Qclientes->FieldByName("ClaveCli")->Value+"'";
DataModule1->tClientes->Filter=Edit1->Text;
DataModule1->tClientes->FindFirst();
DataModule1->tClientes->Edit();
} |
lo compilo y todo esta bien pero, al ejecutarlo, y hacer click en el boton editar me marca el error que ya mencione
"Acces violaton at Addres 405C4E7E in Module VCLDB50.BPL..."
En verdad no entiendo que puede estar pasando, porque pruebo el mismo código con otras tablas y en un proyecto nuevo y funciona!!, pero al hacerlo en mi aplicación ¡nada!
Por Favor si alguien me puede ayudar se lo agradecería mucho, o si conocen alguna otra forma de mostrar los datos ordenados alfabeticamente, probe con un código que vi aqui mismo en el foro
| Código: | //Ordenar alfabéticamente
Tabla->Active = false;
Tabla->IndexFieldNames = campo;
Tabla->Active = true; |
pero no funciona.
Unba vez más disculpen las molestias y gracias por la atención |
|
| Volver arriba |
|
 |
TOÑO Master

Registrado: 26 Ago 2002Mensajes: 223Ubicación: Madrid - España -
|
Publicado: Mar 19 Nov, 2002 12:00 pm Asunto: |
|
|
HOLA:
Probado en interbase con c++ builder 5
Edit1->Text="codigo ='"+Query1->FieldByName("CODIGO")->Value+"'";
Table1->Filter=Edit1->Text;
Table1->FindFirst();
Table1->Edit();
funciona perfectamente
Probado en interbase con c++ builder 5
Table1->Active = false;
Table1->IndexFieldNames = "DESCRIPCION";
Table1->Active = true;
funciona perfectamente.
El error tiene que estar en otro sitio.
1º ¿la query sigue siendo select * from cliente order by codigo ?
2º "Tabla->IndexFieldNames = campo; " campo es un indice que ya has creado ¿no? .
Pues no se que te puede estar pasando, necesitaria mas codigo.
By. |
|
| Volver arriba |
|
 |
mgf Invitado
|
Publicado: Vie 29 Nov, 2002 9:12 am Asunto: |
|
|
Hola, no sé si abrás solucionado tu problema, pero puede que el problema está en:
DataModule1->Qclientes->FieldByName("ClaveCli")->Value
porque cuando no ordenas, puede que ese valor no sea nulo y cuando ordenas sí, es decir, que a lo mejor tienes que comprobar si es nulo antes de acceder a él. Creo que era con IsNull. |
|
| Volver arriba |
|
 |
DesaSoftware Invitado
|
Publicado: Vie 29 Nov, 2002 9:19 am Asunto: |
|
|
| Ya intentaste hacer la prueba sin la instruccion ORDER? (sIN ORDENAR LA CONSULTA) ? |
|
| Volver arriba |
|
 |
DesaSoftware Invitado
|
Publicado: Vie 29 Nov, 2002 9:26 am Asunto: |
|
|
| Ya intentaste hacer la prueba sin la instruccion ORDER? (sIN ORDENAR LA CONSULTA) ? |
|
| Volver arriba |
|
 |
DesaSoftware Invitado
|
Publicado: Vie 29 Nov, 2002 9:47 am Asunto: |
|
|
El query de los empleados es asignado en ejecucion, pero tal vesz tengas parametros asiganados en tiempo de diseño.
tal vez al cerrar el query, generas un error en los demas controles por que no existe el "campo" referenciado debido a qu el query ya lo cerraste (aunque inmediatamente lo vuelvas a abrir).
Asignado todo en tiempo de diseño o todo en tiempo de ejecucion
Por otro lado.
Yo manejo 2 querys. Uno para la consulta y otro para la actualizacion
en la consulta puedo filtrar , insertar columans de otras bases de datos , ordenar etc (debido a eso no puedo modificar, (checalel libro la cara oculta de c++ etc)
Entonces asignaria el query de consulta al dblookup y al momento de seleccioanr el elemento utilizaria el queryModificar con un
queryModificar->SQL->Clear();
queryModificar->SQL->Add("select * from tcliente where codigocliente='"+queryConsulta->FieldByname("codigocliente")->AsString+"'");
queryModificar->Open();
Este queryModificar es que estaria ligado a los controles tdbedit para modificar o insertar
para insertar o borrar
QueryModificar->Close();
QueryModificar->SQL->Clear();
QueryModificar->SQL->Add("Delete from Country where Name = 'Argentina'");
Query1->ExecSQL();
Bueno. algo asi.. ya estoy cansadop son las 2:45 am. te prometo que mañana enviare algo mas coherente..
Saludos de Mexico Playa delCarmen
Ing. Gabriel Góngora |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Vie 29 Nov, 2002 4:05 pm Asunto: |
|
|
Gracias a todos por sus respuestas, aun no he resuelto el problema, pero voy a probar con todo lo que me dicen y después les cuento.
Muchísimas gracias por prestar atención a mi problema  |
|
| Volver arriba |
|
 |
Lucy Ens

Registrado: 06 Nov 2002Mensajes: 28
|
Publicado: Vie 29 Nov, 2002 4:14 pm Asunto: |
|
|
Gracias a todos por sus respuestas, aun no he resuelto el problema, pero voy a probar con todo lo que me dicen y después les cuento.
Se me olvidaba mencionar que ocupo Paradox
Muchísimas gracias por prestar atención a mi problema  |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|