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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-05-2015
Farko Farko is offline
Registrado
NULL
 
Registrado: may 2015
Posts: 5
Poder: 0
Farko Va por buen camino
Angry Error desconocido al tratar de acceder un registro

Hola amigos; trabajo hace mucho en delphi con BDE. Ahora estoy tratando de migrar a Firebird. Por lo cual e estado haciendo algunas pruebas básicas para ambientarme y entender un poco el manejo de datos en esta nueva plataforma.

Les comento mi problema:
Tengo una pequena base de datos creada con IBExpert, la cual tiene una tabla (Productos) con tan solo 5 registros:

** Estructura de la tabla Productos
Field Name Field Type Size
Codigo CHAR 20
Nombre CHAR 50


** Registros contenidos
Codigo Nombre
============
001 Producto 1
002 Producto 2
003 Producto 3
004 Producto 4
005 Producto 5


Tengo un formulario con un componente SQLConecction, y un SQLDataSet. El SQLConecction conectado a la base de datos, y el SQLDataSet conectado al SQLConecction, tambien un componente TMemo para mostrar el resultado de la consulta.

Hice un pequeno programa para leer un registro especifico de la tabla, el cual funciona perfectamente bien. Si le asigno a la variable "sCodigo" el valor '002', me encuentra y muestra el "Producto 2", si lo cambio a sCodigo:='001', lo mismo, muestra el producto 1, y con cualquier numero de "000 a 99999999", ningun problema. Si lo encuentra lo muestra, de lo contrario, no muestra nada (obvio).

El problema se produce cuando le asigno a la variable "sCodigo" algo como esto: sCodigo := 'R002', o sCodigo := 'ABC'.., el punto es que basta con poner una letra en la variable de buqueda y delphi me entrega el siguiente error: "Project Project1.exe raised exception class TDBXError with message 'Column Uknown R002 At line 1, column 38'", y lo mismo si hubieramos asignado sCodigo := ÁBC", el error sera: Project Project1.exe, ........... 'Column Uknown ABC .......'", el contenido de la variable, al parecer se valida como nombre de una columna.

Ahora bien si yo en mi tabla "Productos", incorporo un nuevo registro con CODIGO=ABC, y Nombre=Producto 6.

** Registros contenidos
Codigo Nombre
============
001 Producto 1
002 Producto 2
003 Producto 3
004 Producto 4
005 Producto 5
ABC Producto 6 <---- Nuevo registro

..., y vuelvo a correr el programa para buscar nuevamente el producto sCodigo := '002' (el cual era encontrado sin problemas antes de incorporar este nuevo registro), Delphi me entrega el siguiente error: "Project Project1.exe raised exception class TDBXError with message 'Conversion error from string "ABC '".

No logro entender que pasa. La variable "codigo", esta definida como Char, pero me da error si el codigo de busqueda tiene alguna letra, o la base de datos contiene en el campo codigo alguna letra.

Adjunto codigo delphi.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   sTabla : String;
   SQL_Text: String;
   sCampo : String;
   sCodigo : String;

begin
   sTabla := 'Productos';
   sCampo := 'Codigo';
   sCodigo:= '002';

   SQLDataSet1.Close;

   SQLDataSet1.CommandType := ctQuery;

   SQL_Text := 'SELECT * FROM '+
                     sTabla    + ' ' +
                     'WHERE ' +
                     sCampo   + '= ' +
                     sCodigo  + ';';

      SQLDataSet1.CommandText := SQL_Text;

   SQLDataSet1.Active := True;

Espero, haber sido claro al expresarme, y haber entregado toda la informacion para que se entienda bien el problema que me ocurre.

De antemano, gracias a todos por su ayuda.
Farko
Responder Con Cita
  #2  
Antiguo 25-05-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, pon un punto de ruptura en SQLDataSet1.Active := True; y mira el contenido de SQL_Text, a ver si es correcto.

Por cierto, te aconsejo otro método para trabajar con firebird, sigue este sencillo y práctico tutorial, te aclarará mucho las cosas.
Responder Con Cita
  #3  
Antiguo 25-05-2015
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
El contenido de la variable sCodigo debe ir entre comillas simples:

Código Delphi [-]
 SQL_Text := 'SELECT * FROM '+
                     sTabla    + ' ' +
                     'WHERE ' +
                     sCampo   + '= ' +
                     QuotedStr(sCodigo)  + ';';

Además me uno a la sugerencia de casimiro de hecharle un vistazo al tutorial.
Responder Con Cita
  #4  
Antiguo 25-05-2015
Farko Farko is offline
Registrado
NULL
 
Registrado: may 2015
Posts: 5
Poder: 0
Farko Va por buen camino
Thumbs up

Casimiro Notevi, y orodriguezca;
les agradezco a ambos por haberse tomado la molestia de leer mi pregunta y responder. Con la modificacion propuesta por orodriguezca, funciono perfectamente para todas las alternativas de busqueda. Tambien agradezco a Casimiro Notevi, por su instructivo, muy facil de entender, y muy practico para alguien que esta comenzando en firebird.

Gracias,
ambos fueron de gran ayuda.

Saludos,
Farko
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
problema al tratar de consultar un registro en firebird 1.5. El_Chava Firebird e Interbase 7 27-11-2008 13:45:07
Error - Nombre Desconocido Paulao Varios 1 14-07-2008 15:35:34
error al tratar de contestar smessina La Taberna 1 30-06-2006 02:03:02
Error en SQL de tipo desconocido al devolver un valor dec Trucos 0 29-06-2006 23:09:04
Error Desconocido - Ayuda Por Favor LucasArgentino Conexión con bases de datos 1 12-12-2003 12:49:25


La franja horaria es GMT +2. Ahora son las 10:49:56.


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