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 13-04-2004
HugoH HugoH is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
HugoH Va por buen camino
Base de Dato Remota

Hola , mi nombre es Hugo y estoy aprendiendo un poco de Delphi. En éste momento estoy intentando hacer un sistema que interactúa con varias bases de datos locales. El problema que tengo es que necesito acceder a una base de datos access remota y no sé que componente utilizar ni cómo hacerlo. Si es posible que me brindarán un ejemplo para poder utilizarlo.
Muchas gracias.
Responder Con Cita
  #2  
Antiguo 13-04-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Como access no posee un servidor, si quieres que tu base de datos se encuentre en forma remota, vas a tener que acceder a una ruta UNC \\SERVIDOR\DIRECTORIO\BASE.MDB o bien mapear una unidad de disco remota, pero no crear un Cliente-Servidor.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 13-04-2004
HugoH HugoH is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
HugoH Va por buen camino
En que propiedad

Usando TTable y Tquery...
Ése path que das debe ir en las propiedades del Ttable o donde...
La arquitectura no es cliente-servidor, simplemente que la base de datos se encuentra en otra máquina lejana a la cual va a correr la aplicación.

Cita:
Empezado por delphi.com.ar
Como access no posee un servidor, si quieres que tu base de datos se encuentre en forma remota, vas a tener que acceder a una ruta UNC \\SERVIDOR\DIRECTORIO\BASE.MDB o bien mapear una unidad de disco remota, pero no crear un Cliente-Servidor.

Saludos!
Responder Con Cita
  #4  
Antiguo 14-04-2004
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
La ruta como bien ha dicho delphi.com.ar se tendría que basar en UNC, esa ruta la debes configurar creando un origen de datos en el BDE Administrator, o en los Origenes de datos(ODBC) de windows, una vez que tengas creado tu origen de datos(alias), en delphi deberas asociar ese alias a tu componente TDatabase, a su vez deberás asociar tu componente TTable a ese TDatabase. Tambien puedes acceder mediante la combinación de un TADOConnection y un TADOTable, muy recomendable para acceder a Access, la configuración de estos dos componentes es muy similar a la de TDatabase y TTable.


Saludos, Tony. Espero haberte servido de ayuda.
Responder Con Cita
  #5  
Antiguo 14-04-2004
HugoH HugoH is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
HugoH Va por buen camino
Acabo de probar lo que me has dicho y no funciona, no sé si hay alguna propiedad en particular que setear...el error que me da es que no puede ejecutar la operacion de inserción en la base de datos por algo referido a la sesion corriente, no se explicarte bien el error(espero entiendas lo que he querido decir).
Te pido por favor si podés indicarme las propiedades exactas que debo modificar para no tener más problemas ya que me tienen precionado por ésta aplicación y no la puedo terminar.
Espero no pedirte demasiado.
Muchas gracias
Responder Con Cita
  #6  
Antiguo 15-04-2004
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
vamos a ver te lo voy a poner por pasos :

1.- Accede al Panel de control de control de windows, luego a los origenes de datos(ODBC) de windows. Una vez alli posicionate en la pestaña DSN de sistema y pincha en el botón Agregar..., se te abrirá un cuadro de dialogo en el cual te pedirá un controlador para acceder a la base de datos; en nuestro caso selecciona Microsoft Access Driver (*.mdb), te aparecerá otro dialogo en el que le tienes que decir un nombre para el origen de datos pon el que quieras por ejemplo MiBd ahora toca seleccionar la base de datos .mdb, bien pincha en el boton seleccionar... y en el siguiente cuadro de dialogo, donde pone nombre de la base de datos pon tu ruta UNC por ejemplo \\Servidor\directorio\basededatos.mdb. despues acepta todos los cuadros de dialogo y salte de ahi.

2º.- Muy bien ya nos hemos creado el origen de datos, ahora viene la conexión en delphi. Abrete un formulario para probar lo que te cuento. Inserta en el un componente TADOConnection. Vale ahora vete a la propiedad ConnectionString de ese componente y pincha en sus tres puntitos ... . Bien ahora te saldrá un cuadro de diálogo en el cual tienes que seleccionar la opción Use Connection String y pulsar el botón Build.... vale ahora te saldrá otro cuadro de diálogo en el que tienes que seleccionar el proveedor en nuestro caso Microsoft Ole DB Provider for ODBC Drivers ahora pasamos a la pestaña Conexión, ahi donde dice especifica origen de datos abrimos el combobox y seleccionamos nuestro origen de datos Midb que nos creamos en el paso 1 . en esa misma pestaña tienes un botón para probar que la conexión es correcta, comprobado esto le damos aceptar.
En el mismo componente para que no tengas que introducir clave a la hora de acceder a la Bd pon la propiedad LoginPrompt a false.

3º Inserta en el mismo formulario otro componente del tipo TADOTable, y en su propiedad Connection selecciona el nombre del componente TAdoConnection por defecto ADOConnection1. Muy bien ahora solo queda seleccionar la tabla de la base de datos a la que queremos acceder, eso se determina en la propiedad TableName. Una vez seleccionada pondremos la propiedad Active de los componentes TADOConnection y TADOTable a true.

4º Perfecto ahora solo nos queda visualizar los datos, insertamos un componente TDataSource y en su propiedad DataSet le indicamos el nombre del componente TTable. Ahora inserta un componente del tipo TDBGrid y en su propiedad Datasource le indicas el componente que nos acabamos de crear, en este momento ya deberías de ver los datos de tu tabla en la rejilla. Para un TQuery deberías tocar las mismas propiedades y en vez de indicarle una tabla insertarias una sentencia SQL.

Espero que con mi explicación puedas llegar a sacar algo en claro , creo que he sido bastante conciso. De todas formas esta es una manera de acceder a los datos de una Bd pero hay muchas más.....

Saludos, Tony
Responder Con Cita
  #7  
Antiguo 15-04-2004
HugoH HugoH is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
HugoH Va por buen camino
Muchas gracias

Realmente te agradezco mucho, y me voy a poner a aplicar lo que me has dicho.
Espero no tener problemas...
Nuevamente muchas gracias
Responder Con Cita
  #8  
Antiguo 15-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

El Paso 1, te lo puedes ahorrar.

Entonces en el Paso 2, en lugar de utilizar el Microsoft OleDB Provider for ODBC, utilizaremeos el Microsoft Jet 4.0 OleDB Provider. En la segunda pestaña, le tendrás que indicar el archivo Access al que se accede (mediante la ruta UNC).

Para acceder a Access es más recomendable utilizar el Provider OleDB para Jet 4, que el de ODBC. Puesto que ese provider es su driver nativo, en cambio con el acceso por ODBC utilizamos una capa intermedia de más. Con el consiguiente ralentimiento de la aplicación, y más posiblidades de errores.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 15-04-2004
HugoH HugoH is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
HugoH Va por buen camino
Conexión exitosa y...otro problema.

Te cuento que apliqué los pasos que me has indicado y la conexión se realiza bien. El tema es que al querer insertar un record en la Base de Datos da el siguiente error "Error de sintaxis en la cláusula FROM".
¿Tiene algo que ver con SQL?
Yo estoy tratando de insertar el record de la siguiente manera:

Form2.ADOTable1.Open;
Form2.ADOTable1.Insert;
Form2.ADOTable1.FieldByName('Campo1').AsString := 'xxx';
Form2.ADOTable1.FieldByName('Campo2').AsString := 'yyy';
Form2.ADOTable1.FieldByName('Campo3').AsString := 'zzz';
Form2.ADOTable1.FieldByName('Campo4').AsString := 'qqq';
Form2.ADOTable1.Post;

¿Ésta ésto bien?
¿Cómo se inserta una sentencia SQL en delphi?

Muchas gracias
Responder Con Cita
  #10  
Antiguo 15-04-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
El error que te da es un error de SQL, sería bueno que nos muestres las consultas.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #11  
Antiguo 15-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
¿ Que Provider OleDB utilizas ? ¿ OleDB for ODBC, o Jet 4.0 ?. En caso de utilizar el primero te recomiendo cambiar al segundo (como comenté en un mensaje anterior).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #12  
Antiguo 16-04-2004
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
como te dije en el mensaje...

Cita:
Empezado por tcp_ip_es
De todas formas esta es una manera de acceder a los datos de una Bd pero hay muchas más.....
Seguro que guillotmarc tiene más experiencia que yo, asi que puedes hacerle caso a él que seguro que acertarás. En cuanto a tu duda con el error SQL, como bien dice el otro gran genio de este foro, debes ponernos la sentencia sql que metes en la query y a partir de hay podremos decirte algo.

Saludos, Tony
Responder Con Cita
  #13  
Antiguo 16-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Como utiliza un componente ADOTable, no ha escrito ninguna consulta SQL en un Query. Por lo que el Error con toda probabilidad viene de los propios componentes o el motor ADO.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #14  
Antiguo 16-04-2004
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
Hombre según el error que pone....
Cita:
Empezado por HugoH
Datos da el siguiente error "Error de sintaxis en la cláusula FROM".
... eso me suena a de todas todas a una sentencia SQL, aunque como bien dices no habla en ningun caso de un componente TADOQuery bueno Huguito si quieres respuestas aclara un poquito más lo que has hecho

Saludos, Tony
Responder Con Cita
  #15  
Antiguo 19-04-2004
Avatar de VolaRe
VolaRe VolaRe is offline
Miembro
 
Registrado: ago 2003
Posts: 121
Poder: 21
VolaRe Va por buen camino
Bueno yo voy a intentar aportar mi granito de arena, aunque yo se mucho de esto.

Código:
HugoH digo:
Yo estoy tratando de insertar el record de la siguiente manera:

Form2.ADOTable1.Open;
Form2.ADOTable1.Insert;
Form2.ADOTable1.FieldByName('Campo1').AsString := 'xxx';
Form2.ADOTable1.FieldByName('Campo2').AsString := 'yyy';
Form2.ADOTable1.FieldByName('Campo3').AsString := 'zzz';
Form2.ADOTable1.FieldByName('Campo4').AsString := 'qqq';
Form2.ADOTable1.Post;
Pues bien creo que el fallo te lo da porque no le indicas que edite, el codigo correcto seria, y si lo que digo es erroneo o una solemne tonteria ma corregis, ¿ok?

Código:
Form2.ADOTable1.Open;
Form2.ADOTable1.Insert;
Form2.ADOTable1.Edit; //y esta es la linea que debes añadir
Form2.ADOTable1.FieldByName('Campo1').AsString := 'xxx';
Form2.ADOTable1.FieldByName('Campo2').AsString := 'yyy';
Form2.ADOTable1.FieldByName('Campo3').AsString := 'zzz';
Form2.ADOTable1.FieldByName('Campo4').AsString := 'qqq';
Form2.ADOTable1.Post;
Bueno espero no haber dicho una tonteria, ta otra
Responder Con Cita
  #16  
Antiguo 19-04-2004
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
Con la instrucción insert el registro ya es editable, asi que no hace falta poner un edit.

Saludos, Tony
Responder Con Cita
  #17  
Antiguo 19-04-2004
HugoH HugoH is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
HugoH Va por buen camino
Mira he agregado un TADOQuery y estoy tratando de insertar un elemento en la base de datos de la siguiente manera:

MyQuery.SQL.Clear;
MyQuery.SQL.Add('INSERT INTO DataBase (campo1, campo2, campo3, campo4)'); MyQuery.SQL.Add(' VALUES("dato1", "dato2", "dato3", "dato3");');
MyQuery.Open;

y me sigue dando error en la sintaxis...
Además no me deja poner la propiedad Active en true por éste motivo.
Espero me ayuden...
Gracias
Responder Con Cita
  #18  
Antiguo 19-04-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por HugoH
Mira he agregado un TADOQuery y estoy tratando de insertar un elemento en la base de datos de la siguiente manera:

MyQuery.SQL.Clear;
MyQuery.SQL.Add('INSERT INTO DataBase (campo1, campo2, campo3, campo4)'); MyQuery.SQL.Add(' VALUES("dato1", "dato2", "dato3", "dato3");');
MyQuery.Open;

y me sigue dando error en la sintaxis...
Además no me deja poner la propiedad Active en true por éste motivo.
Espero me ayuden...
Gracias
Existen varios problemas, el primero es que se trata de una consulta de inserción de datos, por lo tanto no puedes hacer un Open del Dataset, tienes que hacer un ExecSQL, el otro problema puede ser que no le guste mucho el ";" al final de la instrucción.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
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


La franja horaria es GMT +2. Ahora son las 06:20:51.


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