Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2005
Avatar de Sotrono
Sotrono Sotrono is offline
Miembro
 
Registrado: abr 2004
Ubicación: Buenos Aires - Argentina
Posts: 396
Poder: 21
Sotrono Va por buen camino
SQL y Delphi

Hey, como va?
Como puedo manipular una base de datos utilizando SQL?
En realidad lo que quiero saber es como establecer la conexion entre la base de datos y el programa.
Responder Con Cita
  #2  
Antiguo 27-01-2005
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
Tendrías que decirnos qué base de datos piensas usar.

// Saludos
Responder Con Cita
  #3  
Antiguo 28-01-2005
Avatar de Sotrono
Sotrono Sotrono is offline
Miembro
 
Registrado: abr 2004
Ubicación: Buenos Aires - Argentina
Posts: 396
Poder: 21
Sotrono Va por buen camino
Mi idea es aprender SQL para poder conectarme a cualquier base de datos, pero bueno voy a empezar con una Acces.
Responder Con Cita
  #4  
Antiguo 28-01-2005
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
En tal caso una opción son las componentes ADO.

Para hacer la conexión necesitas una componente TADOConnection y configurar su propiedad ConnectionString. Para ello lo más sencillo es que abras el editor de dicha propiedad desde el inspector de objetos y oprimas el botón "Build...". En la ficha "Proveedor" selecciona "Microsoft Jet 4.0 OLE DB Provider" y en la ficha "Conexión" seleccionas la base de datos de Access.

Una vez configurada la cadena de conexión pones en false la propiedad LoginPrompt (a menos que requieras un usuario y contraseña para acceder a la base).

Para hacer las consultas SQL requieres una componente TADOQuery. La consulta en sí la pones en la propiedad SQL y ejecutas la consulta ya sea con el método Open o con ExecSQL dependiendo del tipo de consulta de que se trate. El primer método es para consultas que regresan registros como SELECT y el segundo para consultas que no regresan registros como INSERT, UPDATE y DELETE.

Puedes usar parámetros en tus consultas, por ejemplo:

Código SQL [-]
select * from personas where nombre like :nombre and edad > :edad

Aquí los dos puntos que preceden a "nombre" y "edad" indican que éstos son parámetros.

Antes de ejecutar una consulta con parámetros debes asiganre valores a éstos. Para ello usas la propiedad Parameters del ADOQuery y su método ParamByName:


Código Delphi [-]
ADOQuery1.Parameters.ParamByName('nombre').AsString := 'PEREZ%';
ADOQuery1.Parameters.ParamByName('edad').AsInteger := 24;

Come ves, ParamByName regresa un objeto de tipo TParameter y debes usar el método AS--- que corresponda al tipo de datos.

En el ejemplo, una vez sustituidos los parámetros la consulta queda:


Código SQL [-]
select * from personas where nombre like "PEREZ%" and edad > 24

que te buscará todos los registros de la tabla `personas` cuyo nombre comienza con "PEREZ" y cuya edad es mayor de 24 años.

Una vez ejecutada la consulta (en este caso con Open) puedes recorrer los registros resultantes con el método Next del ADOQuery. En cada registro puedes acceder a los campos mediante el método FieldByName:

Código Delphi [-]
while not ADOQuery1.Eof do
begin
  {
    Accedes a los campos con
      ADOQuery1.FieldByName('nombre').AsString y
      ADOQuery1.FieldByName('edad').AsInteger y
  }

  ADOQuery.Next;
end;

Como te darás cuenta, Eof es una propiedad de ADOQuery que determina si ya alcanzaste el final de los registros.

También puedes conectar el ADOQuery mediante un TDataSource a cualquier componente de acceso a datos como un TDBNAvigator, TDBGrid, TDBEdit, etc.

// Saludos
Responder Con Cita
  #5  
Antiguo 28-01-2005
Avatar de Sotrono
Sotrono Sotrono is offline
Miembro
 
Registrado: abr 2004
Ubicación: Buenos Aires - Argentina
Posts: 396
Poder: 21
Sotrono Va por buen camino
Ok, muchas gracias por tu Mini-Tutorial de SQL en Delphi.
Ya pude hacer la conexion y ahora voy a empezar a profundizarme mas en el tema.
Responder Con Cita
  #6  
Antiguo 22-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Este hilo es un poco viejor pero...
Cita:
Empezado por roman
Código Delphi [-]
 ADOQuery1.Parameters.ParamByName('nombre').AsString := 'PEREZ%';
 ADOQuery1.Parameters.ParamByName('edad').AsInteger := 24;

Come ves, ParamByName regresa un objeto de tipo TParameter y debes usar el método AS--- que corresponda al tipo de datos.
roman, en realidad en los componentes ado(D7) no existen los metodos AsString, AsInteger,...Solo Existe Value.

Reinicio este hilo ya que estoy teniendo problemas con este componentes y su captura de parametros: Parameters Objects is improperly defined. Incosistent o imcomplete information was provider.

Ese es el error que me tira.
Código Delphi [-]
 with AdoQuery do begin
   sql.Text:='Insert into bvnat01 (contrato, codemp, tipre, fechapre, '+
                 'fechamort, forpag, numsem, montopre, balpre, amopre) '+
                 'values(:contrato, :codemp, :tipre, :fecha, :fecha:, '+
                 ':forpag, :numsem, :monto, :monto, :monto)'
   with Parameters do begin
     inc(contrato);
     ParamByName('contrato').value:=IntToStr(contrato);
     ParamByName('fecha').Value:=Now;
     ParamByName('forpag').Value:='S';
     ParamByName('monto').Value:=edtdesc.Value;
     ParamByName('codemp').Value:=AlignEdit1.Text;
     ParamByName('tipre').Value:='7';
     ParamByName('numsem').Value:=numsem;
   end;
   ExecSQL;
 end;
Hasta luego
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #7  
Antiguo 22-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Echando un vistazo rápido, veo que fecha lo tienes repetido, y además como ":fecha:" empieza y termina con los 2 puntos.

Error de pegado?

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 22-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Cita:
Empezado por lepe
Error de pegado?
No, tienes razon. Esta mal. Gracias por la observacion. Si supieras las veces que lo he chequiado y no lo veia.:P

Cita:
Empezado por lepe
veo que fecha lo tienes repetido,
Nada qeu ver, tengo dos campos fechas qeu al insertarlo deben ser iguales.

Aun sigue dandome error.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!

Última edición por vtdeleon fecha: 22-08-2005 a las 15:29:56.
Responder Con Cita
  #9  
Antiguo 22-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
No veo error alguno salvo el bug comentado en las MSDN de mocosoft al parecer hay que establecer el Parameter.Size para los parámetros de texto

Ya me contarás si es cierto. Aunque es código VB, al ser fallo del ADO, digo yo que se podrá solucionar por delphi tambien.

Cita:
With Cmd2
Set .ActiveConnection = Conn
.CommandText = "CustomerByID"
.CommandType = adCmdStoredProc

End With

Cmd2.Parameters.Refresh
Cmd2.Parameters(0).Type = adVarChar
Cmd2.Parameters(0) = "COMMI" 'Set the text parameter value.

' If the next line is omitted you will get an error 3708 -
' "The application has improperly defined a Parameter Object".
Cmd2.Parameters(0).Size = 5


Rs.Open Cmd2, , adOpenStatic, adLockReadOnly
Debug.Print Rs(0), Rs(1), Rs(2)
Rs.Close
Un saludo y suerte
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 23-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Ya solucione el problema y era este
Cita:
Empezado por Lepe
veo que fecha lo tienes repetido,
Lepe tenia razon.
A pesar de que los parametro se declaren con igual nombre, son diferentes. Asi que lo declare con diferentes nombres.
Cita:
...:fecha,:fecha
Parameter[0] es igual a :fecha
y
Parameter[1] es igual a :fecha
Gracias
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
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


La franja horaria es GMT +2. Ahora son las 04:42:40.


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