Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2007
Avatar de sapoku
sapoku sapoku is offline
Registrado
 
Registrado: feb 2007
Ubicación: Chile
Posts: 7
Poder: 0
sapoku Va por buen camino
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...
Responder Con Cita
  #2  
Antiguo 09-02-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
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?
__________________

Responder Con Cita
  #3  
Antiguo 09-02-2007
Avatar de sapoku
sapoku sapoku is offline
Registrado
 
Registrado: feb 2007
Ubicación: Chile
Posts: 7
Poder: 0
sapoku Va por buen camino
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;

no mas errores, y corre.
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
Responder Con Cita
  #4  
Antiguo 11-02-2007
Avatar de sapoku
sapoku sapoku is offline
Registrado
 
Registrado: feb 2007
Ubicación: Chile
Posts: 7
Poder: 0
sapoku Va por buen camino
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..
Responder Con Cita
  #5  
Antiguo 11-02-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
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');
Responder Con Cita
  #6  
Antiguo 11-02-2007
Avatar de sapoku
sapoku sapoku is offline
Registrado
 
Registrado: feb 2007
Ubicación: Chile
Posts: 7
Poder: 0
sapoku Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 12-02-2007
Avatar de sapoku
sapoku sapoku is offline
Registrado
 
Registrado: feb 2007
Ubicación: Chile
Posts: 7
Poder: 0
sapoku Va por buen camino
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,,..
Responder Con Cita
  #8  
Antiguo 12-02-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
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:
Use QuotedStr to convert the string S to a quoted string. A single quote character (') is inserted at the beginning and end of S, and each single quote character in the string is repeated.
Responder Con Cita
  #9  
Antiguo 12-02-2007
Avatar de sapoku
sapoku sapoku is offline
Registrado
 
Registrado: feb 2007
Ubicación: Chile
Posts: 7
Poder: 0
sapoku Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 26-02-2007
knife_sj knife_sj is offline
Miembro
 
Registrado: feb 2005
Posts: 18
Poder: 0
knife_sj Va por buen camino
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
Responder Con Cita
  #11  
Antiguo 27-02-2007
Avatar de sapoku
sapoku sapoku is offline
Registrado
 
Registrado: feb 2007
Ubicación: Chile
Posts: 7
Poder: 0
sapoku Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
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


La franja horaria es GMT +2. Ahora son las 15:45:37.


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
Copyright 1996-2007 Club Delphi