Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Cómo conectar "simple" a DB Access (https://www.clubdelphi.com/foros/showthread.php?t=65707)

Casimiro Noteví 08-01-2010 01:49:14

Cómo conectar "simple" a DB Access
 
Hola, me ha surgido una duda existencial, me han encargado hacer una exportación de datos a un programa de contabilidad (otro más), pero este usa una BD Access.
El asunto es que necesito conectar a esa base de datos para pasarle una serie de registros habituales en estos casos: apuntes, cuentas, etc. y me han surgido varias dudas después de haber estado consultando algunos posts en clubdelphi.
La primera es que hay que usar una "cadena" de conexión y no sé exactamente qué poner ahí, he visto que hay varias posibilidades de "motores", entre ellos estos:
Cita:

Microsoft Jet 4.0 OLE DB Provider
Microsoft OLE DB Provider for ODBC Drivers
Microsoft OLE DB Simple Provider
Si utilizo los componentes de la pestaña "ADO", ¿qué motor debo usar?, me gustaría que el cliente no tenga que instalar nada, si es posible.
Y otra duda, el usuario y password predeterminado en access, ¿cuál es?
Y de momento esas son todas las dudas.
Por si sirve de algo: Delphi 5 + IBX + Firebird 1.5 ---> ¿ADO? + ¿ODBC? + Access

marcoszorrilla 08-01-2010 06:35:32

Hola Casimiro: Generalmente lo que se hace es exportar en formato texto y luego cualquier programa de contabilidad importa, al inyectar los datos directamente siempre puedes tener el problema que si pasa algo al otro programa lo achaquen a que se han metido datos a las tablas por "fuerza bruta".

Un Saludo.

fjcg02 08-01-2010 09:26:51

Hola,
Independientemente del sistema que utilices, yo he utilizado
Microsoft Jet 4.0 OLE DB Provider
cuando he utilizado ADO.
Cuando generas la cadena de conexión, puedes mirarla ( es un texto ) para que el propio usuario pueda cambiarla , o utilizar un ini para que la bbdd pueda residir en cualquier lugar.
Si miras la cadena de conexión, encontrarás dentro de ella
"C:\datos\bbdd.mdb". Para personalizar la conexión sólo tienes que cambiar este dato y reconectar. Con ODBC sería más peliagudo ya que tienes que editar el odbc. Se podría hacer por código, pero lo veo más complicado.

Saludos

Neftali [Germán.Estévez] 08-01-2010 10:34:52

Cita:

Empezado por Casimiro Notevi (Mensaje 350226)
Si utilizo los componentes de la pestaña "ADO", ¿qué motor debo usar?, me gustaría que el cliente no tenga que instalar nada, si es posible.
Y otra duda, el usuario y password predeterminado en access, ¿cuál es?
Y de momento esas son todas las dudas.
Por si sirve de algo: Delphi 5 + IBX + Firebird 1.5 ---> ¿ADO? + ¿ODBC? + Access

Hola Casimiro.
La forma habitual para conectar a Access con ADO (utilizando el motor de Jet 4, que es el de Access) es la primera que has propuesto:
Microsoft Jet 4.0 OLE DB Provider
Lo único imprescindible es tener en el ordenador instaladas las MDAC y mínimamene actualizadas (cosa muy habitual si el sistema está actualizado); Si vas a trabajar con alguno muy antiguo (w98), tal vez podrías revisarlo. En este caso no hace falta ni siquiera que esté Access instalado.

Para Access, salvo que la Base de Datos tenga seguridad implementada, se usa Admin y contraseña vacía.

Delphi 5 + IBX + Firebird 1.5
Delphi 5 + ADO + Access

La cadena de conexión la puedes obtener utilizando el asistente que viene con el ADOConnection/ADOTable; De todas formas si quieres todos los detalles, incluyendo las que incluyen contraseña en la Base de Datos y las que tienen seguridad implementada, puedes verlas aquí.

Casimiro Noteví 08-01-2010 12:54:19

Muchas gracias a todos, es que ando perdido en estas cosas de access, jet, mdb :D

Cita:

Empezado por marcoszorrilla
Hola Casimiro: Generalmente lo que se hace es exportar en formato texto y luego cualquier programa de contabilidad importa, al inyectar los datos directamente siempre puedes tener el problema que si pasa algo al otro programa lo achaquen a que se han metido datos a las tablas por "fuerza bruta".marcoszorrilla

Sí, siempre lo hago de esa forma (fichero de texto), salvo cuando no queda otra solución, recuerdo una vez que un programa sólo importaba de un .dbf, y en este caso el programa lee de una BD "puente", no escribo en su base de datos "principal", no me gusta meterme en lios innecesarios :)

Casimiro Noteví 08-01-2010 14:56:00

Bueno, ya he acabado un programita para pruebas y gracias a vuestra ayuda ha sido bastante sencillo, lo único raro es que me resulta extraño no tener transacciones, me recuerda la época del dbase, qué tiempos aquellos.

marcoszorrilla 08-01-2010 15:02:32

Cita:

Empezado por Casimiro Notevi (Mensaje 350266)
Bueno, ya he acabado un programita para pruebas y gracias a vuestra ayuda ha sido bastante sencillo, lo único raro es que me resulta extraño no tener transacciones, me recuerda la época del dbase, qué tiempos aquellos.

.Select Clientes
.Set Filter to Codigo = "4300001"
.Browse
.Quit

Un Saludo.

Casimiro Noteví 08-01-2010 19:17:49

Cita:

Empezado por marcoszorrilla (Mensaje 350267)
.Select Clientes
.Set Filter to Codigo = "4300001"
.Browse
.Quit

Un Saludo.

... con unos poquitos comandos sobraba para hacer una gestión :)

Caral 09-01-2010 01:49:49

Hola
No se que tipo de transacciones?? o que serán.:confused:
Lo que si se es que si se quiere que se ejecute una acción con eficacia y sin que tenga problemas en access se usa algo como esto, sobre todo si se trabaja en red y con varios usuarios a la vez:

Código Delphi [-]
procedure TFOrdProd.BitBtn1Click(Sender: TObject);
var bok : TBookMarkStr;
begin
   OrdenCompra.Active := False;
   OrdenCompra.SQL.Text := 'Select OrdenCompra From OrdenProd WHERE OrdenCompra ='+QuotedStr(Edit7.Text);
   OrdenCompra.Active := True;
   If Edit7.Text = OrdenCompra.Fields[0].Value then
   MessageDlg('La orden de Compra ya Existe',mtError,[mbOK],0)
   else
   If Edit3.Text = '' then MessageDlg('Debe especificar el código del cliente',mtError,[mbOK],0)
 else

   begin
      ShortDateFormat := 'dd/mm/yyyy';
      DataModule1.AC1.BeginTrans;
      try
         If Nueva then
         QTemp.SQL.Text := 'Insert Into OrdenProd (Codorden, FechaInicio, FechaRequerido, CodUsuario, Comentarios, CodCliente, Prioridad, Enrutada, OrdenCompra) '+
                           'Values (' +Edit2.Text+', '+QuotedStr(Edit4.Text)+', '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', '+
                            QuotedStr(Edit5.Text)+', '+QuotedStr(Memo1.Text)+', '+Edit3.Text+', '+IntEdit1.Text+', True, '+QuotedStr(Edit7.Text)+')'
         else
         QTemp.SQL.Text := 'Update OrdenProd set FechaRequerido = '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', Comentarios = '
                            +QuotedStr(Memo1.Text)+', CodCliente = '+Edit3.Text+', Prioridad = '+IntEdit1.Text+
                            ' Where CodOrden = '+Edit2.Text;

         QTemp.ExecSQL;
         guardada := true;
         IF Nueva  then
         begin
            QOrdProd.Requery();
            QOrdProd.Last;
         end
         else begin
                bok := QOrdProd.Bookmark;
                QOrdProd.Requery();
                QOrdProd.Bookmark := bok;
              end;
         DataModule1.AC1.CommitTrans;
         If Nueva then If MessageDlg('Orden Guardada.'+#13+'¿Desea agregar items a la orden?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
         Nueva := False;
         QOrdProd.Close;
         QOrdProd.Open;
         TabSheet3.Show;
      except
         on E:Exception do DataModule1.AC1.RollbackTrans;
      end;//try
end;
Lo mas seguro es que me equivoco pero para mi lo colocado en rojo son transacciones, digo.:), me equivoco?:confused:
Saludos

Casimiro Noteví 09-01-2010 02:50:59

:eek: entonces sí que tiene transacciones.

Por cierto, ¿qué componente es el que has nombrado AC1 (DataModule1.AC1.BeginTrans)?

Muchas gracias, Caral, ese código me viene muy bien para lo que necesito hacer.

Caral 09-01-2010 03:04:08

Hola
Uso los componentes ADO, este es el ADOConnection.
ADoConnection1
Es mas fácil de escribir.:D
Saludos

Caral 09-01-2010 03:11:25

Hola
Amigo sabes que de estas cosas no se, pero si necesitas ayuda tu nada mas pide.
En lo que este a mi alcance (osea no mucho) con gusto.
Saludos

Casimiro Noteví 09-01-2010 14:23:22

Cita:

Empezado por Caral (Mensaje 350320)
Hola
Amigo sabes que de estas cosas no se, pero si necesitas ayuda tu nada mas pide.
En lo que este a mi alcance (osea no mucho) con gusto.
Saludos

Muchas gracias, amigo :)

richy08 14-04-2010 20:43:31

hola que tal estoy tratando de hacer uan interfaz con access pero veo que cambia un poco el codigo del tadoconnections en esta linea que inicias la transaccion.
DataModule1.AC1.BeginTrans;

no es necesario primero darle un connect ??? o siempre esta conectado
a la bd estoy un poco enredado con estas sentencias gracias.

Caral 14-04-2010 20:58:12

Hola
Tiene que estar conectado.
Saludos

richy08 14-04-2010 21:59:55

gracias caral por responder, me surge otra duda al estar conectado todo el tiempo el componente no interfiere con el funcionamiento normal del aldelo ??, la pregunta es por que tengo dos etsaciones en red que estaran escribiendo datos al mismo tiempo que mi aplicacion, y una ultima duda encontre un codigo tuyo

Código:

      except
        on E:Exception do DataModule1.AC1.RollbackTrans;
      end;//try

con este codigo en dado caso que exista algun error por x razones se desaran los cambios de la inserccion o cualquier movimiento mil gracias por tu tiempo.

Caral 14-04-2010 22:36:56

Hola
No afecta que este conectado ya que es el ADOconnection no una tabla en especial, lo uso en red con varios programas corriendo sin problemas.
Lo otro, la teoria dice que si, pero la practica no es tan cierta, depende de como se incluyan o modifiquen los datos.
Saludos
PD: Tendrias que preguntarle a alguien que sepa, yo apenas aprendo.

richy08 14-04-2010 23:18:39

gracias por tu tiempo caral, creo que ahora estoy un poco mas confiado en meterle mano al aldelo, y pues ya somos dos los que estamos aprendiendo access :D mil gracias.


La franja horaria es GMT +2. Ahora son las 16:49:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi