![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
ejemplo completo de ado solo por codigo???
hola. es mi primer post y les informo que soy bastante newby en delphi.
estoy tratando de hacer un modulo u unit para manejar bases de datos, pero solo mediante codigo. aqui estan las declaraciones de variables para la unidad. unit b_d; interface uses ADODB, SysUtils, DB, Messages, Windows; VAR // OBJETO PARA LA CONEXION A LA BD CONEXION: TADOCONNECTION; STRING_CONEXION: STRING; // OBJETOS PARA CONECTAR A TABLAS TABLA_CLIENTE:TADOTABLE; // OBJETOS PARA FUENTES DE DATOS ---- DATA SOURCE DS_CLIENTE: TDATASOURCE; // DECLARACION DE FUNCIONES FUNCTION INICIAR_CONEXION():BOOLEAN; PROCEDURE TERMINAR_CONEXION(); FUNCTION INICIAR_CLIENTES():BOOLEAN; PROCEDURE MSJ_PRUEBA(); luego genero una funcion para inicializar la conexion, la cual anda bien. FUNCTION INICIAR_CONEXION():BOOLEAN; VAR PROVEEDOR, SERVER, DATABASE, UID,PWD :STRING; BEGIN PROVEEDOR:='DRIVER={MySQL ODBC 3.51 Driver};'; SERVER:='SERVER=localhost;'; DATABASE:='DATABASE=sistema_apolonia;'; UID:='UID=root;'; PWD:='PWD=marciano;'; String_CONEXION := PROVEEDOR + SERVER + DATABASE + UID + PWD+ ' OPTION=3' ; try CONEXION := TADOConnection.Create(nil); CONEXION.ConnectionString := String_CONEXION; CONEXION.Open(); MSJ_PRUEBA(); INICIAR_CONEXION := true; except INICIAR_CONEXION := false; end; end; mi problema esta en cuando quiero conectar el elemento ttable, para el cual genere una funcion. FUNCTION INICIAR_CLIENTES():BOOLEAN; BEGIN try TABLA_CLIENTE.Connection := CONEXION; TABLA_CLIENTE.TableName:= 'ficha_paciente'; TABLA_CLIENTE.Active:= TRUE; DS_CLIENTE.DataSet := TABLA_CLIENTE; DS_CLIENTE.Enabled:= TRUE; MSJ_PRUEBA(); INICIAR_CLIENTES:= TRUE; finally INICIAR_CLIENTES:= FALSE; end; end; PROCEDURE MSJ_PRUEBA(); BEGIN MessageBox(0, pchar( '' +#13#10+' BASE INICIADA CORRECTAMENTE '), pchar('MENSAJE DE PRUEBA'), MB_OK+MB_ICONINFORMATION); end; me da un error cuando trato de entregar el objeto conexion. cualquier ayuda sera muy agradecida... |
#2
|
||||
|
||||
Bienvenido a los foros, date una vuelta por esta página, y por esta otra.
Ahora bien ¿cuál error es el que te marca?
__________________
|
#3
|
||||
|
||||
He logrado solucionar mi problema.
Solo faltaba crear los objetos. todo el codigo estaba bien, aca les pongo la funcion para iniciar ttable completamente funcional. FUNCTION INICIAR_CLIENTES():BOOLEAN; BEGIN try //INICIO DE TABLA tabla_cliente:= tadotable.Create(tabla_cliente); TABLA_CLIENTE.Connection := CONEXION; TABLA_CLIENTE.TableName:= 'ficha_paciente'; TABLA_CLIENTE.Active:= TRUE; // INICIO DE DATA SOURCE DS_CLIENTE:= TDATASOURCE.Create(DS_CLIENTE); DS_CLIENTE.DataSet := TABLA_CLIENTE; DS_CLIENTE.Enabled:= TRUE; INICIAR_CLIENTES:= TRUE; finally INICIAR_CLIENTES:= FALSE; end; end; ![]() la idea, es tener un modulo exclusivo para manejar la base de datos. sl2 y gracias por leerme. Lord Sappokus PD: juagadores visiten www.ogame.com.es |
#4
|
||||
|
||||
lamentablemente ahora tengo un nuevo problema.
la funcion de filtro no me funciona bien. me da el siguiente error: 'argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros' Lo mas raro, es que algunos filtros funcionan otros no. por ejemplo, este fuciona . procedure TForm2.BT_BUSCAR_RUTClick(Sender: TObject); begin TABLA_CLIENTE.Filter:= 'RUT = ' + E_RUT.Text ; TABLA_CLIENTE.Filtered :=TRUE; end; ahora, el siguiente ya no funciona. procedure TForm2.BT_BUSCAR_RUTClick(Sender: TObject); begin TABLA_CLIENTE.Filter:= 'nombres = claudio' ; TABLA_CLIENTE.Filtered :=TRUE; end; ambos campos en la BD son de tipo varchar(50), la unica diferencia es que rut es clave primaria. cualquier ayuda sera agradecida.. |
#5
|
|||
|
|||
El problema está en las comillas, RUT supongo que es un campo numérico y por eso funciona bien. Nombres supongo que es un campo cadena, así que no te irá bien así, sin comillas en el nombre. Prueba lo siguiente
TABLA_CLIENTE.Filter := 'nombres=' + QuotedStr('claudio'); |
#6
|
||||
|
||||
hueno, como decia el post, ambos campos tienen el mismo tipo de dato.
pero ahora me dejaste con toda la duda, para que se usa el QuotedStr???? hueno, tratare de todas formas para ver que pasa... sl2 |
#7
|
||||
|
||||
Estimados...
Ahora les tengo un comportamiento mas extraño todavia. Logre hacer que el error desapareciera, pero lo interesante es el como.... basta con que el primer caracter ingresado en el edit sea un numero, y el problema se soluciona.. ahora, esto no sirve, dado que estoy tratando de buscar un nombre,... ahora si que no tengo idea que esta pasando. Por favor ayudenme.. Obi wan, tu eres mi unnica esperanza,,.. |
#8
|
|||
|
|||
Sigo pensando que el problema está en las comillas, lo que te puse antes debería funcionar. No uso ADO, pero en el resto de sistemas de acceso a base de datos funcionaría de esta manera.
Sacado de la ayuda de Delphi: Cita:
|
#9
|
||||
|
||||
Tenias toda la razon...
Trate con el quotedstr y funciono perfecto. lo unico es que busca coincidencias exactas, creo que hay una opcion del filter que permite busquedas parciales. hueno, una vez arreglado ese detalle posteo una funcion de busqueda completa. |
#10
|
|||
|
|||
consejos
1º no te recomiendo que uses adotable, personalmente prefiero las ADOQuery, el compilador suele tirarme un error con las table cuando se abren.
2º tampoco recomiendo que uses filter, es mejor que uses los querys como por ejemplo: Código Delphi [-] ADOQuery1.SQL.Text := 'select * from clientes where nombre like ''%'+Edit1.Text+'%'''; los % son opcionales, si no pones el del principio te buscara todo los registros que empiezen con lo que contenga el edit y si no pones el del final te busca los que terminen con lo que contenga el edit |
#11
|
||||
|
||||
Yo no he tenido problemas, especialmente ahora que se trabaja en codigo.
respecto a usar querys. El software que estoy desarrollando prefiero que no acceda muchas veces a la BD. Esto se debe a que estoy trabajando con un campo para huellas dactilares, y al momento de hacer busquedas tendria que repetir el query para sacar elemento a elemento, mientras que usando filter, se hace la extraccion solo una vez y luego se mueven los datos en memoria. Pero esto es un caso especial, dado que las busquedas no las puede realizar un query, si no que las hace un dll especial. Para que quede constancia, la mayor diferencia de trabajar con filter y query, es netamente que la busqueda por query le da la tarea a la BD, mientras que el filter, filtra la informacion en la aplicacion. Esto produce diferencia en rendimiento y velocidad, y hay que ser muy cuidadoso, especialmente si estas en una BD que trabaja en server con muchos request. |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Grabar En SQL Campos Decimales, Solo me graba enteros? Con Codigo | freddiaz07 | SQL | 13 | 21-09-2006 18:44:34 |
el codigo completo | ElDioni | SQL | 2 | 11-07-2005 17:39:41 |
Pasar el código o solo la orientación | Pablo Carlos | Debates | 5 | 03-10-2004 16:07:54 |
Informe Completo | Franklim | Impresión | 5 | 02-04-2004 13:45:29 |
Escoger en una tabla sólo los registros cuyo código es par | lolobs | SQL | 3 | 25-09-2003 19:55:16 |
![]() |
|