FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Hola fjcg02, gracias amigo por tu respuesta y por tu ayuda. Te diré que aun sigo teniendo problema con esto, tengo la corazonada que con lo que me explicaste debo resolver el problema, pero parece que debido a mi desconocimiento es que no he podido hacerlo, te explico para ver si de una vez y por todas puedo acabar con esto que ya me tiene cansado y me imagino que a ti también, te pido mil disculpas por robarte tu preciado tiempo. Te cuento desde cero para que me entiendas bien. tengo en el formulario un ado connection, un ado table, un data source y un ado query, además de varios dbedit enlazados a datos, con tres botones de comando uno agregar, uno cancelar y el otro guardar. Seguí tu consejo agregué al formulario un ado query, en la propiedad strings de la misma puse los siguiente:
Agregué un parámetro al adoquery en la propiedad parameters del mismo, el parámetro se llama IdFactura y además le define el tipo de valor del mismo como ftstring y le establecí un valor de tipo string, el campo en la base de datos es de tipo varchar. Los dbedit están enlazados al ado table, en el evento before post de este ado table puse lo sigueinte: Siguiendo los consejos que me diste, aquí lo que veas ADOT hace referencia al ado table y ADOQ hace referencia al ado query. Cuando ejecuto la aplicación para probar el código y pongo el número de una factura que ya existe me levanta una exception en la clase EoleException que me dice que el parámetro no es encontrado. Reviso y fectivamente el parámetro que creé mo lo elimina, es decir lo quita, incluso en tiempo de diseño lo defino, y luego cuando vuelvo a ver ya no está, no entiendo que estoy haciendo mal. A lo mejor no estoy poniendo los códigos en los eventos correspondientes, a lo mejor los dbedit deber estar conectados al adoquery y no al ado table, son las cosas que estoy pensando pues no se ya que hacer. Espero puedas ayudarme, disculpa mi insistencia pero creo que debo aprovechar tu paciencia y tus conocimientos para que me ayudes a resolver este tema, una vez mas te pido mil disculpas. |
#2
|
||||
|
||||
Lo he leido rápidamente, a ver si esta noche le puedo dedicar un poco de tiempo.
Cuando añades una ADOQUERY, pon el codigo SQL que te indiqué pero en tiempo de DISEÑO. No hace falta que vuelvas a añadir el codigo sql en tiempo de ejecución. En diseño, cuando pones "WHERE idFactura=arametro", accede a la propiedad parametros de la query y verás que aparece un parámetro llamado "parametro". Si pones en la query WHERE campo1=arametro1 AND campo2=arametro2, si accedes a la propiedad parámetros, apareceran parametro1 y parametro2. Es en tiempo de ejecución cuando deben actualizar SOLAMENTE los parámetros dandoles el valor que desees. Abres de nuevo la query y aparecen los registros que cumplen la condición con esos valores Para probar, crea un proyecto vacío con una query, un dataset y un dbgrid, pon un Tedit y juega con ello, para que veas cómo funciona. El resto es añadirlo a tu proyecto de la manera que te convenga. En los ejemplos que trae la aplicación esto está explicado creo que de manera más que suficiente. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#3
|
|||
|
|||
Me sigue dando el mismo error, me dice que el parámetro no lo encuentra, lo que hice fue esto en el evento before post del adotable:
Comprobé y el parámetro si está, no se porque pasa esto. Disculpame que te chive tanto. Gracias. |
#4
|
||||
|
||||
Cita:
ADOQNuevaFactura.SQL.Add('WHERE IdFactura =: IdFactura'); me parece que esos dos puntos(que te faltan son el problema. Suerte. Fede |
#5
|
||||
|
||||
Prueba con esto
Código:
begin ADOQNuevaFactura.Close; SOBRAN LAS SIGUIENTES LINEAS ADOQNuevaFactura.SQL.Clear; SOBRA ADOQNuevaFactura.SQL.Add('SELECT IdFactura, IdProveedor, Descripcion, FechaRecepcion, Aplicada, Importe'); SOBRA ADOQNuevaFactura.SQL.Add(' FROM Factutras'); SOBRA, y está mal escrito el nombre d ela tabla ADOQNuevaFactura.SQL.Add('ORDER BY IDFactura'); SOBRA ADOQNuevaFactura.SQL.Add('WHERE IdFactura = IdFactura'); SOBRA // la sentencia SQL es 'WHERE idFactura=:PARAMETRO', a introducir en tiempo de diseño FIN DE LO QUE SOBRA ADOQNuevaFactura.Parameters.ParamByName('IdFactura').Value :=DBEditNumero.Text; ADOQNuevaFactura.Open; if ADOQNuevaFactura.RecordCount > 0 then ADOTNuevaFactura.Cancel else ADOTNuevaFactura.Post; end; Ya me contarás.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#6
|
|||
|
|||
Saludos fjcg02, muchas gracias por tu respuesta, no te había respondido antes puesto que me encontraba fuera del trabajo, pero estoy de vuelta. Te cuento que ya hize las modificaciones que me indicaste pero ahora tengo el siguiente problema: en el evento before post del ado table puse el siguiente código:
Este mismo código lo repite en el evento click del botón de comandos Guardar, cuando ejecuto la aplicación y trato de introducir una factura ya existente me sale el mensaje que aparace colocado en la función messagedlg y cuando le doy al botón ok de dicha función en los controles enlazados a datos aparece el último registro de la tabla, hasta aquí creo que todo es normal, ahora cuando trato de ageragar una nueva factura y le doy al botón guardar la aplicación se queda colgada, no me genera ningún mensaje de error, pero no hace nada, incluso chequeo la tabla para ver si agregó el nuevo registro y nada, tengo que presionar Ctrl+F2 para volver al entorno de delphi, no sé por qué pasa esto. Disculpa tanta molestia, debo tenerte mareado con lo mismo, espero no lo tomes a mal. Muchas gracias. |
#7
|
||||
|
||||
Cita:
Cuando te dé registros la comprobación, pon el cancel, pero si está OK no pongas nada ( borra la linea de Tabla.Post), ya que ya salta el evento. En el botón de guardar no llames al procedimiento, sino haz lo siguiente: Pregunta si está en edición la tabla La llamada a tabla.post hará saltar el procedimiento., por lo que pasas el control de duplicados. Que la apliación se te quede colgada puede ser porque se mete en un bucle infinito. Pon puntos de ruptura en todos los procedimientos que crees que saltan y con f8 lo ejecutas paso a paso. Espero haberte ayudado. Un saludo PD: Perdona que no pueda ayudarte como me gustaría, pero ahora mis esfuerzos son todos para mi hija ( tiene un mes ) , y si sobra algo para delphi !
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#8
|
|||
|
|||
Hola a todos:
El problema es que me parece que no has entendido bien la cuestion. En la clausula where debes poner los dos puntos":" y pegado a estos el nombre del parámetro, con eso Delphi se dará cuenta que le vas a pasar un paramétro, esto lo puedes hacer en tiempo de diseño (en la propiedad SQL del ADOQuery) o en ejecución. Ahora bien como le pasas la sentencia en tiempo de diseño en tu procedimiento aplicas:
Con eso debes poder abrir la consulta y continuas con el resto del código Saludos
__________________
Ernesto R. |
#9
|
|||
|
|||
Ramiretor muchas gracias por tu ayuda, es cierto lo que faltaban eran los dos puntos
|
#10
|
|||
|
|||
fedelphi, muchas gracias es cierto el problema estaba en los dos puntos
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla | taru | MySQL | 1 | 27-07-2006 15:36:12 |
Insertar un registro en una tabla Paradox | maravert | Tablas planas | 1 | 14-10-2005 02:08:02 |
Comparar un registro de un edit con un registro de una tabla en una consulta | Damian666 | SQL | 10 | 01-10-2005 00:43:20 |
Insertar registro en tabla | jzk | Conexión con bases de datos | 15 | 26-05-2004 18:58:19 |
Borrar e Insertar un registro de una tabla con Query | Draco | Conexión con bases de datos | 4 | 06-05-2004 17:27:37 |
|