Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-09-2019
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
¿ Alias obligatorios en Select ?

Hola. Posteo una consulta bastante simple, hace poco que estoy trabajando con Firebird 3 y me encuentro con lo siguiente, al hacer un consulta simple a una base de datos:

Si utilizo esta sentencia de pruebas, obtengo el error de "columna desconocida" (unknown column) tanto desde Lazarus como desde Flamerobin o incluso IBExpert:

Select * From ENVIADOS
Where turno_id > 100
Order by turno_id


Para que funcione, tengo que escribirla así:

Select * From ENVIADOS
Where enviados."turno_id" > 100
Order by enviados."turno_id"


O sea que me está obligando a colocar de forma obligatoria el nombre de la tabla ENVIADOS en los nombres de campo. Recuerdo que antes no era necesario, sólo usaba eso cuando tenía un SELECT que se aplicaba a más de una tabla...¿ es alguna particularidad de Firebird 3 ? ¿ Se puede configurar para evitar eso ?. Es una consulta sobre una simple tabla. Tengo componentes como la fantástica grilla RxDbGrid que si activo el orden al hacer clic en el títulos de una columna muestra el mismo error "unknown column", como que usa el nombre de campo directamente sin colocarle el nombre de la tabla antes. Me estoy perdiendo de algo.

__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.

Última edición por rretamar fecha: 20-09-2019 a las 01:56:18.
Responder Con Cita
  #2  
Antiguo 20-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Así, sin verlo, diría que has creado la base de datos con los nombres de campos entrecomillados, algo así:
Código SQL [-]
create table tbEnviados (
  "Id" integer not null,
  "Nombre" varchar(64),
  etc.
);
Si has hecho eso, entonces tendrás que referirte a los campos exactamente de cómo lo has escrito: "Id", "Nombre", etc.
Yo siempre lo creo así:
Código SQL [-]
create table tbEnviados (
  id integer not null,
  nombre varchar(64),
  etc.
);
Responder Con Cita
  #3  
Antiguo 20-09-2019
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Gracias por responder Casimiro. Efectivamente, al revisar la sentencia SQL de definición (DDL), veo que los nombres de campò están entrecomillados .Desconozco cómo ocurrió esto, desde la lista de campos en las tablas usando IBExpert o Flamerobin los veía sin comillas, lo mismo dentro de Lazarus. Ya volví a crear la tabla sin las comillas, aprovechando las definicioes del DDL (es una base de datos de prueba, sin contenido más que uno o dos registros de prueba por tabla).

Sigo sin entender en que momento se crearon los campos de TODAS las tablas con comillas.

Saludos cordiales y gracias.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #4  
Antiguo 20-09-2019
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
A propósito, por si alguien no lo conoce, aquí hay un excelente blog dedicado a FIREBIRD con mucho material, todo en español.

https://firebird21.wordpress.com/
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #5  
Antiguo 20-09-2019
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Así, sin verlo, diría que has creado la base de datos con los nombres de campos entrecomillados, algo así:
...
Si has hecho eso, entonces tendrás que referirte a los campos exactamente de cómo lo has escrito: "Id", "Nombre", etc.
...
Nunca usé comillas en los nombres de campo pero agendo la lección

Saludos amigo
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 21-09-2019
carnace carnace is offline
Miembro
 
Registrado: feb 2008
Ubicación: Yopal, Casanare, Colombia
Posts: 27
Poder: 0
carnace Va por buen camino
Gracias Casimiro por la aclaración. Sabía que tenía algo mal en mi Base de Datos, pero no le había prestado atención a las comillas. Resulta que por ahorrar tiempo convertí un archivo de access a firebird 3 con un programa llamado "DbConvert for MS Access & Firebird" y en las tablas que pasé todas aparecieron con comillas dobles. Las tablas que ya tenía creadas en Firebird desde cero no tienen comillas, pero en el IBExpert se manejaban bien tanto con comillas como sin ellas.
Código Delphi [-]
          if BotonSeleccionado=mrOk then //Si presiono OK actualizar descripción en BD
          begin
            SQLQuery1.SQL.Clear;
            SQLQuery1.SQL.Add('   UPDATE "TCodEPS"');
            SQLQuery1.SQL.Add('   SET "Nom_eps" = '+QuotedStr(s2));
            SQLQuery1.SQL.Add('WHERE "Cod_EPS" = '+QuotedStr(s));
            SQLQuery1.ExecSQL(False);
          end;
{y en otro lado tengo esto: }
  with SQLQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG=0;');
    ExecSQL(True);
    Open;
  end;
{ Me pareció extraño que tuviera que usar comillas para que funcionara el código }

Última edición por carnace fecha: 21-09-2019 a las 17:15:53.
Responder Con Cita
  #7  
Antiguo 21-09-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Claro, es que para "curarse en salud" esos programas los pasan entrecomillados porque con access puedes crear campos incluso con espacios, ejemplo: "Codigo Cliente", y es por lo que lo pasan todo con comillas y se acabó. Así que luego hay que estar recordando los nombres exactos de cómo se crearon y poniendo las comillas.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con campos obligatorios daragor Lazarus, FreePascal, Kylix, etc. 21 07-10-2012 21:30:26
Utilizar un valor de un Select dentro de otro Select gluglu SQL 6 15-04-2011 14:22:36
enviar mensajes de error en campos obligatorios y clave unica Goyo Conexión con bases de datos 0 15-05-2007 23:11:07
Select de dos alias morfeo21 Varios 1 08-08-2006 01:32:37
Problemas con claves primarias y campos obligatorios Bitbanner Conexión con bases de datos 1 09-02-2005 11:20:31


La franja horaria es GMT +2. Ahora son las 10:21:11.


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