Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
entrando en el mundo ADO

Visto lo visto, y como no he sido capaz de encontrar una solución a mi problema he decidido cambiar y empezar a utilizar ADO para conectarme a mi base de datos.
La realidad es que no se nada acerca de ADO, pero es de la única forma de la que he conseguido solucionar una cosa (crear una tabla en access mediante código). En paradox ya lo tenía solucionado, pero por más que he buscado y he investigado no he sido capaz de hacerlo para access.
Ya creo tablas nuevas con ADO, parece que no es muy complicado de utilizar, ahora me gustaría eliminar tablas.

Toda la ayuda que me puedan dar me será útil seguro, o algún hilo que explique alguna cosilla de ADO para ir familiarizándome con el.

El cambio lo realizo, ya que es una aplicación para una base de datos personal y acabar la aplicación no me urge. Y así podré resolver los problemas futuros más rápidamente.

Muchas gracias de antemano y un saludo a todos los del foro.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #2  
Antiguo 07-06-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Cita:
Empezado por weke
.....ahora me gustaría eliminar tablas.
Has probado con una sentencia SQL?

Código SQL [-]
drop table MiTabla

PD: no aseguro que funcione, no he trabajado con ADO, pero por probar......
Responder Con Cita
  #3  
Antiguo 07-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 21
__marcsc Va por buen camino
Hola,

yo creo que lo único que tienes que hacer es poner un ADOCommand que envie a la conexión el Drop Table que te comenta cadetill.

Saludos!
Responder Con Cita
  #4  
Antiguo 07-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Gracias por contestar tan rápido. Es justo lo que estaba probando antes de leer vuestros mensajes.

El código que he puesto es el siguiente:
Código Delphi [-]
    try
      ADOCommand1.CommandText:='DROP TABLE ' + tabla_eliminar;
      ADOCommand1.Execute;
      borrada:=true;
    except
      ShowMessage('La tabla no se ha podido eliminar correctamente.');
    end;

Pero no me la elimina, me salta del 'Execute' al 'except'.

Es lo primero que he probado, porque al crear la tabla lo he hecho con 'CREATE TABLE nombre_tabla' y si que me ha funcionado.

Gracias.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #5  
Antiguo 07-06-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Hola Weke

Sin responder a tu pregunta, te daré un consejo. En el manejo de errores, es conveniente saber el error que realmente te da Delphi. Es más fácil capturar los posibles fallos del programa. Para ello, puedes hacer algo así:

Código Delphi [-]
try
  ADOCommand1.CommandText:='DROP TABLE ' + tabla_eliminar;
  ADOCommand1.Execute;
  borrada:=true;
except
  on E: Exception do
    ShowMessage('La tabla no se ha podido eliminar correctamente.'#13#13 + 
                     'Mensaje de error: '#13 + E.Message);
end;

Es una buena costumbre
Responder Con Cita
  #6  
Antiguo 07-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Gracias por el consejo cadetill.
Ya he conseguido que me borre correctamente la tabla.

Ahora, todo lo que crean que sea interesante saber acerca de ADO, me vendrá bien. Si me sale alguna dudas más os la haré llegar.

Muchas gracias otra vez a todos.

Saludos.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #7  
Antiguo 07-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Question

He colocado un 'ADOConnection' en el formulario principal. Lo he declarado como publico para que todos los componentes se conecten a él.
He asignado los datos que tenía en la propiedad "ConnecionString" del 'ADOCommand'.
Pero cuando ejecuto la aplicación, me da el error siguiente:
Cita:
Class TADO Connection not found.
La propiedad "LoginPrompt" la he puesto a false para que no me pida clave.
Ya no he tocado ninguna propiedad más.

¿Debería hacer algo más o así ya debería funcionar?

Muchas gracias y un saludo.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #8  
Antiguo 07-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 21
__marcsc Va por buen camino
La conexión te funciona en tiempo de diseño y te da error al ejecutar? O la creas por código?
Responder Con Cita
  #9  
Antiguo 07-06-2004
Avatar de FNADALO
FNADALO FNADALO is offline
Miembro
 
Registrado: oct 2003
Ubicación: Palma de Mallorca
Posts: 97
Poder: 21
FNADALO Va por buen camino
Wink

Fijate en la propiedad Active debes ponersela a True,
yo al contrario que tú he trabajado siempre con Ado frente a
Access o Sql Server, muy buena elección Ado, Te felicito
ahora dejate darte unos consejos, pon un Datamodule donde
solo tendrás el AdoConnection y pasasela a todo formulario que
crees, no hace falta de este modo crearla como Public, ya lo
será, el segundo tema a plantearte es el siguiente trabajara tus aplicaciones
Cliente/Servidor, con muchos registros, supongamos que me respondes que si
entonces el proximo paso será un AdoQuery donde lo conectaras al AdoConnection y pondrás tus propios Selects, Agregaras un DataSouce
y asi ya tienes un Recodset Actualizable,,,, empieza por aqui Saludos.
Responder Con Cita
  #10  
Antiguo 07-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
La conexión la creo en tiempo de diseño, en tiempo de ejecución solo voy a conectarla (cuando cree la aplicación) y desconectarla (cuando la cierre):
Código Delphi [-]
Connected:=true;
Conencted:=false;

Pero de momento no la he dejado a false porque me da el error antes de crear la aplicación, y me sigue dando el error.

Gracias.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #11  
Antiguo 07-06-2004
Nelet Nelet is offline
Miembro
 
Registrado: may 2003
Ubicación: Picassent - Valencia
Posts: 95
Poder: 21
Nelet Va por buen camino
En la cláusula USES tienes la referencia a ADOdb?
Responder Con Cita
  #12  
Antiguo 08-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Gracias, Fnadalo, por tus consejillos. Los pondré en práctica en cuanto pueda.

Ahora respondiendo a la pregunta de Nelet, si tengo la referencia a ADODB en el uses.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #13  
Antiguo 08-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Fnadalo, ya he modificado lo del Datamodule que me indicaste, funciona muy bien, gracias otra vez.
Con respecto a si utilizao muchos registros, pues de 100 para arriba. Antes tenía hechas una serie de consultas que me funcionaban correctamente, pero en ADO no se si cambiará en algo. La verdad es que no he tocado nada de la consulta que tenía, simplemente le he cambiado el nombre al ADOQuery y he ejecutado, pero la consulta no me devuelve nada. Un ejemplo de consulta es la siguietne:
Código Delphi [-]
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('SELECT * FROM Music WHERE Formato like "*' + aux + '*" order by Grupo');
  Query1.Active:=true;
  Query1.Open;
Si hay algún error, gracias por indicármelo.

Saludos.
__________________
De lo bueno lo mejor, de lo mejor lo superior.

Última edición por weke fecha: 08-06-2004 a las 07:55:36. Razón: faltaban datos
Responder Con Cita
  #14  
Antiguo 08-06-2004
Avatar de FNADALO
FNADALO FNADALO is offline
Miembro
 
Registrado: oct 2003
Ubicación: Palma de Mallorca
Posts: 97
Poder: 21
FNADALO Va por buen camino
Wink

Weke te paso un código que es como lo utilizo este genera
un Abm a partir de unos campos y una tabla,
Código Delphi [-]
  AdoQuery1.Close;
     AdoQuery1.SQL.Clear;
     ADOQuery1.Connection := DataModule1.ADOConnection1;

     if SqlStr.Text <>'' then
        begin
           AdoQuery1.SQL.Add(SqlStr.Text)
        end
        else AdoQuery1.SQL.Add('Select * From '+ Tabla.Text);

//     AdoQuery1.SQL.Add(SqlStr);
//     AdoQuery1.SQL.Add('Select * From '+ Tabla );
     if Busca.Text <> '' then
        begin
           AdoQuery1.SQL.Add('where '+ Busco.Text);
           AdoQuery1.SQL.Add(' LIKE '+ quotedStr(Busca.Text) +' + ' + '''%''');
        end;


     AdoQuery1.SQL.Add('ORDER BY ' + Busco.Text);
     AdoQuery1.Open;

  // Asignación al Objeto DataSource el DataSet. ---
     DataSource1.DataSet := AdoQuery1;
Fijate en la linea que tengo el Like.

Última edición por __cadetill fecha: 08-06-2004 a las 09:27:56. Razón: poner etiqueta Delphi
Responder Con Cita
  #15  
Antiguo 08-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
He hecho la siguiente modificación pero sigue sin devolverme nada:

Código Delphi [-]
Query1.SQL.Add('SELECT Teléfono, Nombre, Apellidos, TeléfonoMóvil, Cumpleaños FROM '+
     'Agenda WHERE Nombre like "*' + quotedStr(aux) + '*" order by Nombre');
Seguiré probando.
__________________
De lo bueno lo mejor, de lo mejor lo superior.

Última edición por __cadetill fecha: 08-06-2004 a las 09:25:29. Razón: Poner salto de linea para evitar scroll
Responder Con Cita
  #16  
Antiguo 08-06-2004
Avatar de FNADALO
FNADALO FNADALO is offline
Miembro
 
Registrado: oct 2003
Ubicación: Palma de Mallorca
Posts: 97
Poder: 21
FNADALO Va por buen camino
Wink

Weke
no Admite el * en su lugar debes poner lo siguiente

WHERE Nombre like QuotedStr(aux)+ '%'

Pruebalo y dime cosas...
Responder Con Cita
  #17  
Antiguo 08-06-2004
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Si analizas lo que estás enviando como SQL, será algo como
SELECT * FROM TABLA where CAMPO LIKE "*'valor_de_aux'*"
Por eso no te devuelve nada.

Código:
Prueba a poner Query.Add('SELECT * ... WHERE CAMPO LIKE '+Quotedstr('%'+valor_de_aux+'%'))
A ver si tienes suerte.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #18  
Antiguo 08-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
He cambiado los '*' por '%', pero sigue sin devolverme nada.
También he puesto directamente lo que tu me has dicho con el mismo resultado, nada. La verdad es que me extraña mucho, pero seguro que es una tontería.
Código Delphi [-]
WHERE Nombre like ' + quotedStr(aux) + '%' + ' order by Nombre'
Tenía puesto '*' porque es el comodín de access, con el '%' no funcionaba.
Gracias.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #19  
Antiguo 08-06-2004
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Gracias fjcg02, era eso, que no colocaba en el sitio adecuado los comodines.

Ahora si que me funciona, probaré con el resto de consultas que tengo que realizar y si me sale algún fallito más ya os lo comento.

Muchas gracias a todos por el interés y la ayuda prestada. Eso de empezar a utilizar una cosa nueva siempre te da los problemas más tontos del mundo.
Saludos.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #20  
Antiguo 08-06-2004
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
sigues haciéndolo como no se debe
Si vuelves a analaizar te queda
"WHERE Nombre LIKE 'valorde_aux'+% order by Nombre"
Necesitas generar
"WHERE Nombre LIKE 'valorde_aux%' order by Nombre"

Así, el códifo será
Código Delphi:
WHERE Nombre like ' + quotedStr(aux + '%') + ' order by Nombre'

Ligero detalle

Un saludete
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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 11:55:10.


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