Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Conectar a SQL Server desde código (https://www.clubdelphi.com/foros/showthread.php?t=54961)

BlueSteel 03-04-2008 22:14:29

Conectar a SQL Server desde código
 
Hola

Estube buscando información de como realizar una conexión manual, es decir, por codigo a una Base de SQL Server 2000 / 2005

Hace un tiempo realice este proceso para conectar a una Base de Interbase...

Código Delphi [-]
Datos.IBD_Propint.Connected := False;
Datos.IBD_Propint.LoginPrompt := False;
Datos.IBD_Propint.DatabaseName := Nombre_Base;
Datos.IBD_Propint.Params.Values ['user_name'] := vUsu.Text;
Datos.IBD_Propint.Params.Values ['password'] := vPas.Text;
try
   Datos.IBD_Propint.Connected := True;
   Parametro := TiniFile.Create('D:\Sistemas\Propint\config.ini');
   Parametro.WriteString('BaseDato','Servidor',Datos.IBD_Propint.DatabaseName);
   Parametro.WriteString('BaseDato','Usuario',Datos.IBD_Propint.Params.Values ['user_name']);
   Parametro.WriteString('BaseDato','Clave',Datos.IBD_Propint.Params.Values ['password']);
   ShowMessage('Base de Dato ya fue asignada');
except
    ShowMessage('Error de conexión, ingrese ruta nuevamente');
end

La idea es realizar algo parecido... pero no se como debo pasar los parametros a TADOConection

cuando se configura me muestra esto

Código:


Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=Administrador;Initial Catalog=Biovial;Data Source=SERVER

La idea es poder configurar el nombre del servidor.. ya que la base se llama igual. y poder guardar los datos en un Archivo Ini...

si alguien sabe.. favor indicar...

Salu2:p:D

jcarteagaf 03-04-2008 22:28:59

Conexión por Codigo
 
En realidad lo que debes hacer es armar esa cadena de conexion

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=Administrador;Initial Catalog=Biovial;Data Source=SERVER

y pasarle a la propiedad Connection String del Componente TADOConnection.

Aunque lo que prefiero hacer es crear un archivo de conexión UDL (Data conecction File) y cargarlo en tiempo de ejecución pasandole a la misma propiedad e la siguiente forma:
ConnectionString := 'FILE NAME=C:\MIARCHIVO.UDL';

Saludos

ContraVeneno 04-04-2008 00:38:50

Para SQL Server 2000
Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
var ini: TIniFile;
begin

  ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'Conexion.ini');
  try
     UsuarioBase:=ini.ReadString('Principal', 'Usuario', '');
     Clave:=ini.ReadString('Principal', 'Clave', '');
     Base:=ini.ReadString('Principal', 'BaseDatos', 'BasePredeterminada');
     Servidor:=ini.ReadString('Principal', 'Servidor', 'ServidorPredeterminado');
     Alias:=ini.ReadString('Principal', 'Alias', 'ODBCPredeterminado');
  finally
    ini.Free;
  end;
  with COnexion do begin //Conexión es un TADOConnection, pero puedes usar lo que quieras.
   If not Connected then begin
    ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False'+
    ';User ID='+QuotedStr(UsuarioBase)+
    ';PassWord='+QuotedStr(Clave)+
    ';Initial Catalog='+QuotedStr(Base)+
    ';Data Source='+QuotedStr(Servidor);
    Connected := True;
   end;
  end;

end;

PUedes crear una función que reciba como parámetro que sección de archivo ini quieres utilizar, de esa forma podrías conectarte a varios lados con solo cambiar la sección ("Principal" en el ejemplo anterior) de donde obtienes los datos de conexión.

BlueSteel 04-04-2008 16:30:40

Gracias ContraVeneno

Justo lo que andaba buscando...

lo probaré inmediatamente...

Salu2:p:D

BlueSteel 08-04-2008 17:23:52

Hola ContraVeneno

mira.. implemente el codigo que me enviastes y me funciona bien.. aunque he tenido un problema...

Vamos por paso...

Cree un formulario para conexión con base de datos, en donde ingreso el servidor, el usuario, la clave y nombre de la base....

cuando ingreso a dicho formulario realizo esto
Código Delphi [-]
     if FileExists('D:\Sistemas\Biovial\config.ini') Then
        Begin
             Parametro := TiniFile.Create('D:\Sistemas\Biovial\config.ini');
             vSer.Text := Parametro.ReadString('BaseDato','Servidor',' ');
             vUsu.Text := Parametro.ReadString('BaseDato','Usuario',' ');
             vPas.Text := Parametro.ReadString('BaseDato','Clave',' ');
             vBas.Text := Parametro.ReadString('BaseDato','Base',' ');
             Parametro.Free;
        End
     Else
        ShowMessage('Debe Ingresar Información de Base de Datos para continuar');

es decir, pregunta si existe el archivo .ini.. si es así me rescata los datos y me los pasa a los Edits correspondientes... de lo contrario me envia para ingresar los datos.

Con el sgte codigo conecto la base de datos.. y esto me funciona super... y los mismos datos que ingrese los almaceno en el archivo .ini... se supone que si no esta creado el archivo .ini me lo crea, de lo contrario solo actualiza...

Código Delphi [-]
     if Datos.ADBiovial.Connected Then Datos.ADBiovial.Connected := False;
     Datos.ADBiovial.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False'+
                                         ';User ID='+QuotedStr(vUsu.Text)+
                                         ';Initial Catalog='+QuotedStr(vBas.Text)+
                                         ';PassWord='+QuotedStr(vPas.Text)+
                                         ';Data Source='+QuotedStr(vSer.Text);
     try
        Datos.ADBiovial.Connected := True;
        Parametro := TiniFile.Create('D:\Sistemas\Biovial\config.ini');
        Parametro.WriteString('BaseDato','Servidor',vSer.Text);
        Parametro.WriteString('BaseDato','Usuario',vUsu.Text);
        Parametro.WriteString('BaseDato','Clave',vPas.Text);
        Parametro.WriteString('BaseDato','Base',vBas.Text);
        Parametro.Free;
        ShowMessage('Base de Dato ya fue asignada');
     except
        ShowMessage('Error de conexión, ingrese ruta nuevamente');
        vSer.SetFocus;
     end


el problema se me genera cuando ingreso al sistema, lo que realizo en el Evento onCreate del formulario principal (Menu)... es lo sgte

Código Delphi [-]
procedure TMenu.FormCreate(Sender: TObject);
Var
   Parametro:Tinifile;
begin
     // Pregunto si existe el directorio, de lo contrario lo creo...
     If not DirectoryExists('D:\Sistemas\Biovial') Then
        Begin
            {$I-}
            MkDir('D:\Sistemas\Biovial');
        End;
     // Pregunto si existe el archivo, de lo contrario envio a Form Conexion_Base para crear archivo y conectar
     if FileExists('D:\Sistemas\Biovial\config.ini') Then
        Begin
             Parametro := TiniFile.Create('D:\Sistemas\Biovial\config.ini');
             Try
                vSer := Parametro.ReadString('BaseDato','Servidor',' ');
                vUsu := Parametro.ReadString('BaseDato','Usuario',' ');
                vPas := Parametro.ReadString('BaseDato','Clave',' ');
                vBas := Parametro.ReadString('BaseDato','Base',' ');
             Finally
                Parametro.Free;
             End;
             With Datos.ADBiovial Do  // Ruta al Formulario y Componente ADOConection
                  Begin
                      if not Connected Then
                         Begin // Aqui paso todos los parametros y conecto...
                              ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False'+
                                                  ';User ID='+QuotedStr(vUsu)+
                                                  ';PassWord='+QuotedStr(vPas)+
                                                  ';Initial Catalog='+QuotedStr(vBas)+
                                                  ';Data Source='+QuotedStr(vSer);
                              Connected := True;
                              ShowMessage('Base conectada');
                         End
                  End;
        End
     Else
        Begin
             ShowMessage('Debe Seleccionar Base de Datos para continuar');
             Base_Conexion := TBase_Conexion.Create(Self);
             Try
                Base_Conexion.ShowModal;
             Finally
                Base_Conexion.Free;
             End;
        End;
end;

Bueno, esto último me genera el siguiente error...

Project Biobial.exe raised exception class EAccessViolation with message 'Access violation at address 004D5C69 in module BioBial.exe'. Read of address 00000058'.

Aunque el error siempre aparece... presiono Ok.. y se puede ejecutar el sistema ... es decir igual conecta

y realizo la compilación paso a paso el error se marca aquí

Código Delphi [-]
  With Datos.ADBiovial Do  // Ruta al Formulario y Componente ADOConection

Que podra ser ??

ContraVeneno 08-04-2008 19:18:48

a caray, pues no sabría decirte exactamente por que, puede ser que el módulo de datos no este creado todavía y por eso te marque ese error. Digo, ese error se genera siempre que quieres accesar a algo que todavía no ha sido creado. Verifica el orden en que se crean las cosas, si primero el módulo de datos y luego tu formulario o primero el formulario y luego el módulo de datos.

Neftali [Germán.Estévez] 09-04-2008 10:08:46

Cita:

Empezado por BlueSteel (Mensaje 278297)
y realizo la compilación paso a paso el error se marca aquí...

Puede ser que e ese punto todavía no esté disponible Datos (Datamodule supongo) o ADBiovial (componente).

Utiliza Assigned para comprobarlo.

BlueSteel 10-04-2008 17:22:47

Ok...

Gracias.. ya lo solucione...

el problema era que el orden de creación de los Form era

Menu ->
Datos ->
Form1
...
Formx

y lo que hice fue poner el Form Datos en primer lugar..

Salu2 y gracias :p:D


La franja horaria es GMT +2. Ahora son las 22:23: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