Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > MS SQL Server
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 03/04/2008
BlueSteel's Avatar
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Join Date: May 2003
Location: Concepción - Chile
Posts: 2,310
Poder: 26
BlueSteel Va por buen camino
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

Code:
 
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
__________________
BlueSteel
Reply With Quote
  #2  
Old 03/04/2008
jcarteagaf's Avatar
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Join Date: Apr 2006
Location: La Paz, Bolivia
Posts: 651
Poder: 21
jcarteagaf Va por buen camino
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

Last edited by jcarteagaf : 03/04/2008 at 22:32.
Reply With Quote
  #3  
Old 04/04/2008
ContraVeneno's Avatar
ContraVeneno ContraVeneno is offline
Miembro
 
Join Date: May 2005
Location: Torreón, México
Posts: 4,740
Poder: 26
ContraVeneno Va por buen camino
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.
__________________


Last edited by ContraVeneno : 04/04/2008 at 00:45.
Reply With Quote
  #4  
Old 04/04/2008
BlueSteel's Avatar
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Join Date: May 2003
Location: Concepción - Chile
Posts: 2,310
Poder: 26
BlueSteel Va por buen camino
Gracias ContraVeneno

Justo lo que andaba buscando...

lo probaré inmediatamente...

Salu2
__________________
BlueSteel
Reply With Quote
  #5  
Old 08/04/2008
BlueSteel's Avatar
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Join Date: May 2003
Location: Concepción - Chile
Posts: 2,310
Poder: 26
BlueSteel Va por buen camino
Cool

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 ??
__________________
BlueSteel
Reply With Quote
  #6  
Old 08/04/2008
ContraVeneno's Avatar
ContraVeneno ContraVeneno is offline
Miembro
 
Join Date: May 2005
Location: Torreón, México
Posts: 4,740
Poder: 26
ContraVeneno Va por buen camino
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.
__________________

Reply With Quote
  #7  
Old 09/04/2008
Neftali [Germán.Estévez]'s Avatar
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Join Date: Jul 2004
Location: Barcelona - España
Posts: 19,449
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Quote:
Originally Posted by BlueSteel View Post
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Reply With Quote
  #8  
Old 10/04/2008
BlueSteel's Avatar
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Join Date: May 2003
Location: Concepción - Chile
Posts: 2,310
Poder: 26
BlueSteel Va por buen camino
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
__________________
BlueSteel
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Conectar a Interbase por codigo desde Builder C++ Gabo C++ Builder 7 01/05/2015 11:04
Ayuda con onexion a sql server 2000 con ado por codigo desde delphi 6 FAGD Conexión con bases de datos 2 26/02/2008 17:24
Conectar a SQL Server y Windows 2003 Server Punzo MS SQL Server 2 11/12/2007 20:30
conectar por codigo un BD access GustavoCruz Conexión con bases de datos 6 03/08/2007 17:43
conectar M$Sql Server con ADO.NET desde Delphi8 bismarito Conexión con bases de datos 5 24/07/2004 20:02


All times are GMT +2. The time now is 10:08.


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