Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-10-2006
aquosoft aquosoft is offline
Miembro
 
Registrado: oct 2006
Posts: 17
Poder: 0
aquosoft Va por buen camino
ADO Y DELPHI (varias dudas)

hola gentes, soy nuevo aca, pero calculo que me van a ver seguido
les cuento: programo hace 4 años en VB y ahora me encontre con que me ofrecieron un trabajo mejor, pero es en delphi...
tengo varias dudas existenciales.. pero la mas importante es la siguiente.. (las demas preguntare despues)
para conectar a una base de datos en VB utilizo Ado, cargando la referencia y definiendo variables como objetos ado.. de esta manera
'//====================
'// creando la conexion:
dim Cnn as adodb.connection

set cnn = new adodb.connection

cnn.ConnectionString = "Provider=SQLOLEDB.1;User ID=MIUSER;Password=MIPASS;Persist Security Info=True;Initial Catalog=MIBASE;Data Source="MISERVER"

'//====================
'// la abro:
cnn.open
'//====================
'// defino variable recordset:
dim rs as adodb.recordset
'//====================
'// seteo recordset
set rs = new adodb.recordset
'//====================
'// genero la consulta
rs.open "select * from mitabla order by campo1",cnn
'//====================
'// entro en un while hasta ke se acaben los registros
'// cargo campo1 en el combo
'// me muevo al siguiente registro

do while not rs.eof
combo1.additem (rs!campo1)
rs.movenext
loop

'//====================
'// cierro recordset
rs.close
'//====================
'// cierro conexion
cnn.close

basicamente lo que hice fue establecer una conexion, setear un recordset, pedirle toda una tabla y cargarla en un combo...

me encantaria saber como puedo hacer esto con ado en delphi.
tengo entendido que para ello, tengo ke agregar a mi proyecto un objeto ADOConnection. definir mi conexion en este y despues
creo ke hay ke hacer algo con un objeto adodataset.. pero no tengo idea como..
si son tan amables, me podrian dar un ejemplo de lo que hice recien, pero en delphi? (con todo el codigo, incluyendo declaracion de variables, uses [para saber como le digo a mi form que use el connection del modulo] y demas)

(-setear un adoconnection en delphi (en un datamodule de ser posible, asi uso una sola conexion siempre)
-decirle a mi formulario que es esa la conexion ke kiero usar
-abrir un dataset que haga referencia a esta conexion y hacer una consulta en este
-devolver los resultados de esta consulta en un combo
-moverme al siguiente registro del adodataset)

muchisimas gracias por la ayuda...
Responder Con Cita
  #2  
Antiguo 31-10-2006
tramjauer tramjauer is offline
Miembro
 
Registrado: ene 2005
Posts: 42
Poder: 0
tramjauer Va por buen camino
Pues si, para realizar esto con ADO, tienes que utilizar los componentes ADO. Te recomendo que te los mires, pero para que te hagas una idea el componente ADOConnection es el que hace la conexion con la BBDD, y despues para poder trabajar con la BBDD tienes que usar los distintos componentes como con el DataSet y el AdoQuery. Este ultimo es el que se encarga de realizar las consultas con la BBDD, mientras que el DataSet es que el que se encarga de conectar el ADOqry con la BBDD.

Espero que te haya ayudado un poco, pero igualmente te recomiendo que te los mires.

Saludos.

Tramjauer.
Responder Con Cita
  #3  
Antiguo 31-10-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
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
Tanto la conexión como el Query, en Delphi se pueden hacer utilizando componentes visuales (TADOConnection y TADOQuery) y las propiedades las puedes configurar visualmente en el formulario; Tanto la conexión como el SQL. Después de eso sólo te quedaría abrir la consulta, hacer el recorrido y rellenar el combo.

Código Delphi [-]
  // Si no has configurado las propiedades en Visual, podrías hacerlo por código...
  ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;...';
  ADOQuery1.Connection := ADOConnection1;
  ADOQuery1.SQL.Add('elect * from mitabla order by campo1');

  // Abrir la consulta
  ADOQuery1.Open;
  // recorrido
  while not (ADOQuery1.Eof) do begin
    // Rellenar el combo
    ComboBox1.Items.Add(ADOQuery1.Fields[0].AsString);
    ADOQuery1.Next;
  end;

  ADOQuery1.Close;
  ADOConnection1.Close;

También se pueden crear los componentes por código, aunque si puedes colocarlos en visual, no hay razón para ello.
__________________
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.
Responder Con Cita
  #4  
Antiguo 31-10-2006
aquosoft aquosoft is offline
Miembro
 
Registrado: oct 2006
Posts: 17
Poder: 0
aquosoft Va por buen camino
mil kinientas gracias!!!
con lo que me pasaste conecte de pelos y la consulta andubo de mil maravillas...
ya que estoy.. te puedo preguntar otras cositas???
como ejecuto instrucciones que no devuelven valores (update, delete, insert, etc)
calculo que es con es con ADOcommand...
pero como te imaginaras no tengo ni idea...
te dejo como antes un ejemplo de mas o menos lo que quiero (asi lo hago en VB)

'//====================
'// creando la conexion:
dim Cnn as adodb.connection

set cnn = new adodb.connection

cnn.ConnectionString = "Provider=SQLOLEDB.1;User ID=MIUSER;Password=MIPASS;Persist Security Info=True;Initial Catalog=MIBASE;Data Source="MISERVER"

'//====================
'// la abro:
cnn.open
'//====================
'// COMIENZO DE LA TRANSACCION (se usa para tratar el error.. si tira un error, voy al tratamiento y hago un rollbacktrans, de esta manera no se ejecuta ninguna de las transacciones encerradas entre un begin y un commit
cnn.begintrans
'//====================
'// ejecuto la instruccion (aca puedo ejecutar cualquier cosa, select, insert, delete, create table, alter table, ejecutar procedimientos almacenados, etc)
cnn.execute "insert into mitabla (apellido,nombre) values ('" & varAPELLIDO & "','" & VARNOMBRE & "')"
cnn.execute "delete from mitabla where nombre='" & varNOMBRE & "'"
'//====================
'// hago ejecucion de la transaccion... (si no pongo begin y commit, se ejecutan directamente
cnn.committrans

Mis principales dudas al respecto son:
-Existe algo similar al begin y al commit?
-Se que para encerrar strings delphi usa la comilla simple, pero esta es caracter especial en sqlserver, por tanto para pasar parametros yo los tengo que encerrar entre comillas simples por ejemplo "'" & varNOMBRE & "'"
-el caracter de concatenacion es el "+" en delphi no?
(calculo ke mi sentencia seria algo como
delete from mi tabla where nombre ='" + varnombre + "'"
pero tengo dudas hacerca de las comillas dobles y simples.. aparte por supuesto de las dudas que tengo de la manera en que se ejecutan estas sentencias...
si me facilitan algun ejemplo como el de recien... se los voy a agradecer muchisimo!!!
Responder Con Cita
  #5  
Antiguo 31-10-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
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
Cita:
Empezado por aquosoft
..como ejecuto instrucciones que no devuelven valores (update, delete, insert, etc)
ambién puedes usar un TADOQuery, pero en lugar de usar Open o Active:=True debes utilizar el método ExecSQL.
__________________
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.
Responder Con Cita
  #6  
Antiguo 31-10-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
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
Cita:
Empezado por aquosoft
Mis principales dudas al respecto son:
(1)-Existe algo similar al begin y al commit?
(2)-Se que para encerrar strings delphi usa la comilla simple, pero esta es caracter especial en sqlserver, por tanto para pasar parametros yo los tengo que encerrar entre comillas simples por ejemplo "'" & varNOMBRE & "'"
(3)-el caracter de concatenacion es el "+" en delphi no?
(calculo ke mi sentencia seria algo como
delete from mi tabla where nombre ='" + varnombre + "'"
pero tengo dudas hacerca de las comillas dobles y simples.. aparte por supuesto de las dudas que tengo de la manera en que se ejecutan estas sentencias...
si me facilitan algun ejemplo como el de recien... se los voy a agradecer muchisimo!!!
(1) Sí, revisa los métodos de ADOConnection; Encontrarás el Begin, Commit, Rollback y InTransaction (para saber si estás dentro de una).
(2)(3) Revidsa en la ayuda QuotedStr; Esta funcion te añade las comillas y te puedes olvidar de ellas:

Código Delphi [-]
   ...  'SELECT * FROM TABLA WHERE Nombre = ' + QuotedStr(StrNombre);
__________________
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.
Responder Con Cita
  #7  
Antiguo 31-10-2006
aquosoft aquosoft is offline
Miembro
 
Registrado: oct 2006
Posts: 17
Poder: 0
aquosoft Va por buen camino
millon de gracias.. andubo todo re bien!!!
una ultima por hoy...
alguno sabe si hay algo que me inserte en el codigo alguna linea o algo para separar los procedimientos uno de otro???
alguna propiedad o en view.. o algo??
tipo algo asi: (pero ke sea propio de pascal y ke no tenga ke separar yo a mano...
gracias y no jodo mas por hoy...

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
begin

end;

// ===================================================

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
    begin
      edit1.Enabled := false;
      button1.Enabled := true;
      button1.SetFocus;
    end;
  if key = #27 then
    begin
      edit1.Text := '';
      edit1.SetFocus;
    end;
end;

// ===================================================

Última edición por dec fecha: 31-10-2006 a las 17:38:15.
Responder Con Cita
  #8  
Antiguo 31-10-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
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
"A mano" puedes programártelo en el "Code Insight" del IDE de Delphi; Accedes por "Tools/Editor Options/Cede Insight".
Defines una abreviatura y su sustitución....

Otra opción es instalar por ejemplo los GExperts (muy recomentables no sólo por esto, sino por muchas otras fucnciones).
A parte de que tienen una utilidad llamada "Code Profreeder" similar a la anterior, pero más configurable.
__________________
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.
Responder Con Cita
  #9  
Antiguo 31-10-2006
aquosoft aquosoft is offline
Miembro
 
Registrado: oct 2006
Posts: 17
Poder: 0
aquosoft Va por buen camino
nooo..... a mano ni loco.. algo ke agregue una linea.. separando procedimientos o funciones o lo que sea.. pero ke las separe... como ke me diga ke ahi termina un procedimiento y empieza otros.. algo visual...
Responder Con Cita
  #10  
Antiguo 02-11-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
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
Cita:
Empezado por Neftali
"A mano" puedes programártelo en el "Code Insight"...
Me refería a que en el "Code Insight" le puedes decir que sustituya una cadena por otra;
Le dices que esto:
"================================================="
equivales a esto:
Sep1

Y cuando en el código escribes el Sep1, el IDE de Delphi te lo sustituye automáticamente.
A eso me refería, pero tal vez no te entendí.
__________________
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.
Responder Con Cita
  #11  
Antiguo 02-11-2006
Rayku Rayku is offline
Miembro
 
Registrado: jun 2006
Posts: 12
Poder: 0
Rayku Va por buen camino
Ok Espero Te Sirva

tengo esta funcion, bueno la coneccion no es mucho problema xq ya te la dieron arriba.

Function ListarSeries(cn: TADOConnection;var Error:String):TADODataSet;
var ADO:TADODataset;
begin
try
ADO := TADODataSet.Create(nil);
ADO.Connection := cn;
ADO.Close;
ADO.CommandType := cmdText;
ADO.CommandText := ' select distinct SerieNotaVenta from TNotaVenta order by SerieNotaVenta ';
ADO.Open;
result := ADO;
except
on E : Exception do
begin
Error:=E.Message;
result := nil;
end;
end;
end;

AQUI HAGO LA LLAMADA Y CARGO EN UN COMBO

// cargar las diferentes series
ADO := TADODataSet.Create(nil);
ADO.Connection := dmConeccion.ADOConection;
ADO.Clone(CVenta.ListarSeries(dmConeccion.ADOConection,Error));
ADO.First;
while not ADO.Eof do
begin
cbSerie.Items.Add(ADO.Fields[0].AsString);
ADO.Next;
end;
Responder Con Cita
  #12  
Antiguo 02-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En la línea que habla Neftali, existe un macro llamado procedure, es decir, en el código tú escribes procedure + CTRL + J y aparece:
Código Delphi [-]
procedure |
begin

end;

El cursor se queda esperando donde está la barra vertical (tubería).

Podrías sustituirlo, o crear uno nuevo que sustituya además añada los separadores que pides. Yo al menos tengo 2 definidos
cos (comentario simple) que se sustituye por:
{ ----------------------------- | ---------------------------------}

cod (comentario doble)
{ -----------------------------------------------------------------
|
----------------------------------------------------------------}

por cierto, las www.GExperts.com amplían un poco el tema de macros
pudiendo insertar automáticamente la fecha, hora, usuario y algunas
otras variables.

Por supuesto todo esto funciona cuando creas a mano un procedimiento, cuando usas el object Inspector, no se hace automáticamente.

Quizás puedas hacer algo con el Jcf (Jedi Code Formatter), un programa open source y gratuito. No te lo puedo asegurar, pero algo es algo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Varias dudas sobre el componente TDrawGrid Aprendiendo OOP 0 21-12-2004 02:50:07
varias dudas zastilla Internet 1 17-11-2004 21:16:34
Varias dudas de funciones seduerey API de Windows 9 30-04-2004 18:36:17
varias dudas sobre consultas y refresco de datos Giniromero Conexión con bases de datos 12 01-03-2004 13:50:11
Varias Dudas mauro Varios 1 10-07-2003 08:32:42


La franja horaria es GMT +2. Ahora son las 09:25:49.


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