![]() |
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... |
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. |
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.
También se pueden crear los componentes por código, aunque si puedes colocarlos en visual, no hay razón para ello. |
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!!! |
Cita:
|
Cita:
(2)(3) Revidsa en la ayuda QuotedStr; Esta funcion te añade las comillas y te puedes olvidar de ellas:
|
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...
|
"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. |
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...
|
Cita:
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í. |
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; |
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:
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 |
La franja horaria es GMT +2. Ahora son las 01:58:05. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi