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 27-07-2012
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Sustituir acceso DLL por unit en código C

Hola

En mi aplicación Delphi, estoy utilizando la base de datos sqlite v.3, a la que se accede a través de una DLL (sqlite3.dll).

Me gustaría acceder a través de su código fuente en C (sqlite3.c).

He estado buscando información de como hacerlo pero no consigo tenerlo claro. Agradecería que alguien pudiera ayudarme, en concreto en lo siguiente:
  • Como incluir en el proyecto la unit de código C y compilarlo
  • Ejemplo de acceso a una función de dicho código, desde Delphi
  • Como decir a un componente de acceso a base de datos de Delphi que debe utilizar esa unit en vez de la dll
Gracias y un saludo
Responder Con Cita
  #2  
Antiguo 27-07-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Lo que pides son "palabras mayores", tendrás que investigar el código de ese programa y cuando lo resuelvas, si te parece bien, explicas aquí cómo lo has hecho
Responder Con Cita
  #3  
Antiguo 27-07-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No sé si venga mucho al caso, pero recuerdo que algo parecido hace midas. Normalmente tienes que incluir la biblioteca midas.dll pero si incluyes la unidas midaslib en el proyecto entonces no hace falta distribuir la biblioteca.

// Saludos
Responder Con Cita
  #4  
Antiguo 27-07-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Usar módulos C en Delphi no es difícil, sin embargo lo que tú quieres hacer sí lo es. El problema lo veo aquí:
Cita:
Empezado por jocaro Ver Mensaje
  • Como decir a un componente de acceso a base de datos de Delphi que debe utilizar esa unit en vez de la dll
Que yo sepa, la única forma de hacerlo es crear tu propio controlador o extender alguna clase de la familia TDataSet o TDataTable o alguna otra. No veo otra forma.

Yo he intentado extender esas clases para diseñar mi propio sistema de base de datos y no lo he conseguido.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 27-07-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pero aún extendiendo la clase TDataSet, ¿cómo le harías?

Otro caso curioso es el de los componentes MyDac de DevArt. El componente TMyConnection tiene una propiedad Options.Direct. Si la pones en false, el ejecutable final requiere que la biblioteca libmysql.dll esté presente. Basta poner la opción en true para que el ejecutable sea independiente.

// Saludos
Responder Con Cita
  #6  
Antiguo 28-07-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Pero aún extendiendo la clase TDataSet, ¿cómo le harías?
Como digo arriba, lo intenté pero no lo conseguí. No encontré información suficiente.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #7  
Antiguo 28-07-2012
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Hola.

Roman, Nuño, ante todo, muchas, muchisimas gracias por vuestra ayuda.

Me confirmáis mi sospecha de que lo mas problemático es decirle al componente que trabaje con el código, salvo que en dicho componente ya esté prevista una propiedad para ese fin.

De todos modos os rogaría un ejemplo de los dos primeros pasos; insertar y compilar la unidad de código C en el entorno Delphi y un ejemplo genérico de acceso a una función del código C desde un método en Delphi.

A ver si con esa información reduzco el problema para dedicarme sólo a revisar los componentes que uso (UniDac que, como MyDac, es de Devart) y revisar sus propiedades para ver si en alguna puedo "convencer" al componente de que se olvide de la DLL.

Un saludo y de nuevo gracias.
Responder Con Cita
  #8  
Antiguo 29-07-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
No se si las últimas versioned lo hacen, creo que no, pero las que yo conozco no compilan C. Así que lo tendrás que traducir a delphi.

Nunca entendí porqué a Builder C++ se le otorgó la capacidad de compilar archivos.pas y delphi no compila cpp...


Saludos.
Responder Con Cita
  #9  
Antiguo 29-07-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por jocaro Ver Mensaje
De todos modos os rogaría un ejemplo de los dos primeros pasos; insertar y compilar la unidad de código C en el entorno Delphi y un ejemplo genérico de acceso a una función del código C desde un método en Delphi.
Lo intentaré, pero aviso que lo hago de memoria y sin probarlo, ¿eh? Posiblemente necesite algún ajuste.

Primero, el código C podría ser algo así:
Código:
/* Ejemplo para llamar desde Delphi. */
  int calcula_cuadrado (int numero)
  {
    return numero * numero;
  }
Ahora, la unidad "envolvente":
Código Delphi [-]
UNIT UnidadEnvolventeC

(* La línea siguiente no recuerdo si era así o usando $obj ó $l ... *)
{$link 'ejemplo.obj'}

INTERFACE
(* Función C. *)
  FUNCTION calcula_cuadrado (Numero: INTEGER): INTEGER; CDECL;
  EXTERNAL;

IMPLEMENTATION
END.

Y ahora el uso:
Código Delphi [-]
PROGRAM Ejemplo
{$mode console} (* ¿Era así? Es que en Free Pascal no hace falta XP *)

USES
  UnidadEnvolventeC;

VAR
  V1, V2: INTEGER;
BEGIN
  V1 := 20;
  V2 := calcula_cuadrado (V1);
END.

Ten cuidado con los tipos de dato de los parámetros y los valores que devuelve. Por ahí hay tablas que muestran la correspondencia entre los diferentes tipos, pero no te guíes por las apariencias porque a veces el tipo "int" de C no se corresponde con el tipo "INTEGER" de Pascal sino con "SMALLINT" ó con "LONGINT".

También ten en cuenta que el mapa de memoria no es idéntico en C y en Delphi, de ahí que se use "CDECL" en el código Pascal. La mayor parte de compiladores de C tienen una directiva que permite hacer lo opuesto (es decir, que la parte escrita en C use un mapa de memoria similar al de Pascal), pero no suele usarse mucho.

Y otra cosa: no uses C++, aparte de porque es un lenguaje horrible con todo lo malo de C y poco bueno añadido, porque el mapa de memoria de C++ es tan diferente del de Delphi que es casi imposible compartir datos. Hazlo todo en C.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 29-07-2012 a las 02:23:25.
Responder Con Cita
  #10  
Antiguo 29-07-2012
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Hola

Gracias por la ayuda y las recomendaciones.

Voy a verlas con detenimiento e intentar aplicarlas en mi programa

Un saludo
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
Sustituir Codigo ASCII Fichero texto lacovera Varios 12 13-11-2009 14:38:28
Acceso a código generado por script Kafu HTML, Javascript y otros 1 09-03-2008 04:39:45
como crear codigo de acceso frholguin Varios 2 24-01-2006 18:59:16
Exportar el codigo fuente de una UNIT a HTML le4br Varios 2 21-02-2005 04:08:02
El CNI tendrá acceso al código fuente de Windows ... kinobi Noticias 6 21-01-2004 21:13:35


La franja horaria es GMT +2. Ahora son las 00:52:06.


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