Ir al contenido


Foto

[RESUELTO] Pasos para conectar una BD SQL server 2005 a Delphi 7 y modificarla


  • Por favor identifícate para responder
17 respuestas en este tema

#1 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 23 octubre 2010 - 10:54

saludos

Necesito conectar una BD SQL server 2005 express a Delphi 7 y modificarla desde el mismo delphi. necesito manejar esa base de datos que tienes varias tablas.

En realidad ya la tengo conectada con la herramienta ADO, pero me falta emplear los demas componentes que me permitan modificarla, crear nuevos registros y todas esas funciones.
  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 octubre 2010 - 07:45

Hola Isedr,
Bienvenid@ a DelphiAccess.  :)

¿Cuando dices que quieres modificar la base de datos te refieres a ingresar registros en sus tablas, eliminar otros, y/o modificarlos? Es decir ¿la típica acción sobre cualquier tabla: INSERTAR, MODIFICAR, ELIMINAR o el conocido ABM?

Si la respuesta es afirmativa puedes hacerlo con los componentes ADOTable y ADOQuery. Con ADOTable puedes acceder a una tabla de la base de datos, mientras que con ADOQuery puedes lanzar instrucciones SQL y es más flexible y recomendable.

Ambos componentes tienen una propiedad FieldByName() y Fields[] mediante estas propiedades es que se puede hacer una lectura de los campos e incluso modificarlos. Cualquier operación afectará al registro "seleccionado" o mejor dicho donde esté el cursor de la base de datos en ese momento.

Con FieldByName() se puede acceder a un campo por su nombre, mientras que con Fields[] accedemos por su posición. Por ejemplo:



delphi
  1. ADOTable1.FieldByName('NombreCampo') // por nombre
  2. ADOQuery1.Fields[5] // por posición: el 6to registro. Está basado en 0..Count - 1



Ahora bien, para poder operar con los registros es necesario tener en cuenta el estado en que se encuentra nuestro DataSet (ADOTable, ADOQuery son ejemplos de DataSet). Para poder insertar un registro es necesario cambiar el estado a "en modo de inserción" y esto se consigue mediante el método Insert, con Append lo ponemos en modo de edición y nos permite modificar el registro activo. Luego para confirmar la acción se hace uso de Post, de Cancel para cancelarlo.

En el libro de la Cara Oculta de Delphi 4 de Ian Marteens, que puede descargarse desde muchos sitios y está escrito en español, puedes ver un diagrama de estados que representa esto.

Además puedes desplazarte por los registros mediante First, Last, Next, Prior.

Con ADOQuery uno puede trabajar con mayor flexibilidad como decía, gracias a que en su propiedad SQL se puede añadir complejas sentencias INSERT, UPDATE, DELETE, SELECT, etc. Naturalmente, el uso y acceso a los registros en un TADOQuery sólo tiene sentido cuando se usa una instrucción SQL SELECT.

La lectura de dicho libro, y el material que tenemos disponible en la sección Manuales, Tutoriales, y a lo largo del todo foro te puede ser de mucha ayuda. No temas ir preguntando tus dudas, y a presionar F1.

Ahora bien, si tu duda pasa por agregar, eliminar o modificar tablas a través de Delphi eso es otro cantar. Te agradecería que seas más precis@ en tus escritos.

Saludos,
  • 0

#3 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 24 octubre 2010 - 07:56

Si, gracias

Tenes razón. Me refiero a que ya tengo la BD y tengo dos tablas (Cliente y Equipo).
Pues estoy desarrollando un pequeño software con el cual pueda guardar los datos de los clientes y los equipos que estos traen a reparar al taller, y quiero que toda esa info me quede guardada.

Pues te agradesco la ayuda. Lo que quiero saber es como conectarme a la BD desde delphi ya que solo he logrado conectarme con el ADOConnection solo en una BD de Acces, pero al que quiero es a SQL Server 2005 express, el cual estoy estudiando un tutorial.

Entonces quiero conectarme a las BD de SQL desde el soft que desarrollo en Delphi 7, y quiero insertar nuevos registros, borrar, etc. Este soft lo desarrolle con tablas Paradox 7, pero lo quiero hacer ahora con SQL pues creo que es mas potente.

Quisiera que me ayudes en este soft. Ya tengo la BD creada y las tablas correspondientes creadas en el directorio por defecto de SQL.

Cuales componentes utilizo, de tal manera que no tenga que escribir tantas instrucciones SQL, solo las necesarias.

  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 25 octubre 2010 - 02:20

Hola lsedr,
Disculpa que responda después de unas cuantas horas, estoy un tanto falto de tiempo.

Primeramente tengo que confesarte que desde hace tiempo que no uso MS SQL Server aunque en el tema de conexión con ADO no ha cambiado en absoluto.

Los pasos son:
1. Poner un ADOConection el el form o DataModule. Haz doble clic en él.
Debería de aparecer un cuadro de diálogo pidiendo que selecciones entre indicar un data link o por medio de conection string.

2. Selecciona esta última opción (conection string) y presiona en Build.
Te aparece una ventana en donde te permite elegir el proveedor de datos. De esa lista debería haber uno que dice "Microsoft OLE DB Provider for SQL Server". Seleccionalo y luego haz clic en siguiente.

3. Ahora estás en la otra pestaña. Allí debes indicar el nombre del servidor, el nombre de usuario y contraseña, y por último debes indicar la base de datos en cuestión.

4. Prueba la conexión y en caso de operación exitosa acepta.

¡Listo! ya tienes establecida la conexión a la base de datos.

Luego puedes emplear, como he dicho antes, los componentes TADOTable y/o TADOQuery.
Vamos primero por lo más fácil: TADOTable, coloca uno, y seleccionalo.

Notarás que en el inspector de objetos te muestra un listado de sus propiedades y eventos. Entre sus propiedades hay una con nombre Connection. En ella debes indicar el ADOConnection. Listo, ya tienes vinculado el Table con el componente de conexión. Ahora debes indicar la tabla a la que se vinculará: ve a la propiedad TableName y selecciona la tabla en cuestión. Es posible que te pida que inicies sesión con el nombre de usuario y contraseña, hazlo.
Listo. Ya tienes todo establecido.

Como te contaba, el ADOTable (como también el TADOQuery) tiene las propiedad Fields y FieldByName para acceder a los registros. Antes de hacer alguna operación en ellos hay que asegurarse de que el componente esté en el estado correcto, de otro modo obtendremos una excepción (aviso de error informando que el dataset no se encuentre en el modo en cuestión). Por ejemplo, si se desea insertar un nuevo registro:

ADOTable1.Insert; // ponemos el estado a "inserción"
ADOTable1.Fields[0].Value := algo; //  pasamos el dato al campo de posición 0
...
ADOTable1.Post; // confirmamos

Recuerda que también se puede acceder a los campos por su nombre:



delphi
  1. ADOTable1.Insert;
  2. ADOTable1.FieldByName('Codigo').AsInteger := 12345;
  3. ADOTable1.Post;



Ahora vamos por el componente ADOQuery. El procedimiento es similar, debes vincularlo con el ADOConnection. Una vez hecho esto puedes emplear la propiedad SQL para generar y/o escribir las sentencias SQL que desees.

En tiempo de ejecución basta con hacer clic en ... de la propiedad SQL para que te aparezca la ventana en donde puedes escribir la sentencia. Por código se hace así:



delphi
  1. ADOQuery1.SQL.Text := 'INSERT INTO ....';



O también se puede "partir" en líneas:



delphi
  1. ADOQuery1.SQL.Add('SELECT ...');
  2. ADOQuery1.SQL.Add('FROM ... ');
  3. ADOQuery1.SQL.Add('WHERE... ');



Dependiendo de las instrucciones se hará uso de Open (para las SELECT) o de ExeqSQL (para INSERT, UPDATE, etc) para ejecutarlas.

Cuando se ejecuta un SELECT en el ADOQuery tendremos los datos de dicha consulta. El acceso a los registros se hace igual que en un ADOTable:



delphi
  1. Edit1.Text := ADOQuery1.FieldByName('Nombre').AsString;



En el ejemplo se lee del registro activo el campo Nombre y se pasa el contenido de éste en formato string a un Edit que tengamos.

Ahora bien, con este estilo de trabajo se lleva a cabo todo accediendo en forma directa a los componentes. Hay otras maneras que suelen ser atractivas y sencillas y hasta que no requieren casi nada de código. Delphi provee de componentes data-ware que facilitan los ABM.

Ve a la pestaña Data Access y "pega" un DataSource en el Form o DataModule. En su propiedad DataSet puedes elegir cualquier DataSet... ADOQuery, ADOTable, entre otros. Luego ve a la pestaña Data Controls... allí tienes una amplia variedad de componentes... todos especializados y diseñados para conectarse con base de datos y facilitar el ingreso, modificación y visualización de los datos.

Pon un DBGrid y un DBNavigator como para ilustrar el proceso. Estos componentes, y el resto de los de la pestaña, tienen una propiedad DataSource... en ella indica el DataSource que pegaste.

Con ello acabas de configurar todo... desde una conexión hasta los controles que mostrarán los datos.

Creo que he dado una buena orientación de como puedes encararlo por tus medios. Lo que he expresado aquí no es nada nuevo que no se haya dicho y consultado en los foros.
Como he dicho antes en los foros que encontrarás en DelphiAccess hay manuales, tutoriales, ejemplos, y más material de consulta. La lectura al libro de "La Cara Oculta" no tiene desperdicio.

Si tienes dudas, ya sabes. Aquí estaremos.

Saludos,
  • 0

#5 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 25 octubre 2010 - 11:09

Un millon de gracias hermano. seguire desarrollando el software como novato que soy. estare probando todo lo que me haz indicado. esta todo muy claro. GRACIAS MIL.
  • 0

#6 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 25 octubre 2010 - 11:37

Ahora tengo un problemita. Hice todo como me decis pero el DBGrid no muestra la tabla ni tampoco el DBNavigator funciona.

el ADOConnection se conecta bien dice que hay coneccion cuando le doy a probar coneccion.
La tabla ya le entre datos en los registros desde el mismo SQL

que estara pasando entonces que no se ve la tabla en el DBGrid ????
  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 27 octubre 2010 - 06:20

Saludos.

Pusiste el componente TDataSource?

Nota: Si el hilo "original" ya fue solucionado es recomendable ponerle la etiqueta de [RESUELTO] y crear un nuevo hilo con la inquietud naciente; así es más fácil darle seguimiento.
  • 0

#8 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 27 octubre 2010 - 09:17

claro, si puse el datasource pero no funciona la DBgrid
  • 0

#9 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 27 octubre 2010 - 09:19

claro, si puse el datasource pero no funciona la DBgrid


Ok... En la propiedad DataSet del componente TDataSource qué valor colocaste amigo ???...

Y en la propiedad DataSource del DBGrid ???

Saludox ! :)
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 27 octubre 2010 - 09:20

claro, si puse el datasource pero no funciona la DBgrid


Puedes subir una imagen de tu IDE para ver como que es lo que tienes y también el código que utilizas para saber con más exactitud tu problema ¿?

Salud OS
  • 0

#11 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 27 octubre 2010 - 09:31

En la propiedad Dataset del Datasource1 puse el ADOtable1.

En la propiedad DataSource del DBgrid1 puse Datasource1.

Y en la propiedad Connection del ADOTable1 coloque ADOconnection1

Utilise entonces un ADOconnection para conectarme a la BD SQL server 2005 express, la conexion la probe y dice que es satisfactoria.

pero no se ve la tabla en el DBgrid.

Otro detalle es que no le puse contraseña al SQL y cuando corro el programa el ADOconnection pide la contraseña pero no le puse ninguna al SQL y pues doy clic en aceptar.

sera por estar sin contraseña que no se visualiza la tabla en el DBGRID ?????



  • 0

#12 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 27 octubre 2010 - 09:46

En el ADOCOnnection debes poner la propiedad LoginPrompt en False para evitar eso, y activaste el Dataset??



delphi
  1. ADOTable1.Active := True //Opcion 1
  2. ADOTable1.Open; //Opcion 2



Saludos.
  • 0

#13 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 27 octubre 2010 - 10:13

gracias hermano esa era la solucion, activarlo
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 27 octubre 2010 - 10:29

gracias hermano esa era la solucion, activarlo


Vaya, pues que bien, pequeño olvido :D :D :D

He ahí la importancia de la descripción completa de una pregunta (y)

Salud OS
  • 0

#15 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 27 octubre 2010 - 10:45

Amigo lsedr... tu tema ha sido dividido por tratarse de otro asunto completamente diferente al resuelto aquí....

El enlace a tu nuevo tema se encuentra en:

http://www.delphiacc...070.0;topicseen

Saludox ! :)
  • 0

#16 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 27 octubre 2010 - 10:50

Amigo lsedr... tu tema ha sido dividido por tratarse de otro asunto completamente diferente al resuelto aquí....

El enlace a tu nuevo tema se encuentra en:

http://www.delphiacc...070.0;topicseen

Saludox ! :)


Te esperamos en el nuevo tema amigo... algunos foristas ya te dimos algunos tips para lo que necesitas (y)

Saludox ! :)
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 27 octubre 2010 - 10:59

Perdon, dividí el tema y no lo informé en este hilo. Mea culpa

Salud OS
  • 0

#18 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 28 octubre 2010 - 11:29

RESUELTO
  • 0




IP.Board spam blocked by CleanTalk.