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 18-08-2006
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Lightbulb Obtener el nombre de la tabla

Hola amigos nuevamente solicitando su valiaza ayuda, espero que este hilo este en el foro que le corresponde, les explico estoy trabajando con delphi 7, firebird 1.5 las fibplus para conectarme, en mi base de datos tengo dos tablas:

Tabla: Clientes
Estructura:
ID - Autonumerico
Nombre - VarChar(90)
id_Clasificacion - Entero
etc - (Demas campos del expediente)

Tabla: ClasifClientes
Estructura
ID - Autonumerico
Descripcion - (Bueno, Malo, Regular, No se factura, etc)

ya en delphi uso un pFIBDataSet (al caso igual que un IBDataSet) donde escribo la siguiente consulta

Código SQL [-]
Select 
 Clientes.ID,
 Clientes.Nombre,
 ClasifClientes.Descripcion
From Clientes
 inner join ClasifClientes on (ClasifClientes.id = lientes.id_ClasifClientes)

muestro los datos en un dbgrid y todo funciona bien, ahora lo que estoy haciendo es una forma para agregar un filtro a esta sentencia select, a grandez rasgos leo el listados de campos de pFIBDataSet y el nombre del campo lo agrego a un combobox, con otro combobox selecciono la condición a aplicar y en un edit el valor a buscar quedando mi condición de la siguiente forma

Código SQL [-]
 where nombre = 'JUAN'

agrego esta linea a mi sentencia sql y funciona bien, tanto para el campo Nombre como Descripcion, el problema es con el campo ID pues mi condición queda:
Código SQL [-]
 Where id = 1
y al agregar la linea a mi sentencia y activar el pFIBDataSet me indica error de ambiguedad ( creo que asi se escribe) debido a que tanto la tabla Clientes como ClasifClientes tienen un campo ID.
alguien me podria asesorar en como lograr saber el nombre de la tabla de la que estoy tomando el campo en mi sentencia SQL.

ya probe intentando escribir la siguiente sentencia:
Código SQL [-]
Select 
 Clientes.ID c_id,
 Clientes.Nombre c_nombre,
 ClasifClientes.Descripcion descripcion
From Clientes
 inner join ClasifClientes on (ClasifClientes.id = lientes.id_ClasifClientes)
where c_id = 1
y como era de esperar me indica que el campo c_id no existe

gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #2  
Antiguo 18-08-2006
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Bueno amigos pa variar creo que no me explique muy bien pero de todas formas gracias ya logre solucionar mi problema, es a través de una función que como parametro le envio la sentencia sql de la consulta que quiero condicionar, el componente mome deporsi lo tengo para mostrar al usuario la condición que esta por aplicar, así que lo aprobeche para obtener los nombres de los campos con todo y tabla y al final lo borro para que el usuario ni se entere:

Código Delphi [-]
procedure TFrmEditaFiltro.PonCondicion(Inicial: String);
Var
  i, r: Integer;
  Campo: String;
Begin
  Memo1.Lines.Clear;
  Memo1.Lines.Append(Inicial);
  ComboBoxMultiple2.Items.Clear;
  ComboBoxMultiple2.Items.Add('(Seleccione)|||');
  for i:= 0 to DataSource1.DataSet.FieldCount - 1 do
    Begin
      For r:= 0 to Memo1.Lines.Count do
        Begin
         Campo:= Memo1.Lines.Strings[r];
         if (pos('.'+UpperCase(DataSource1.DataSet.Fields.Fields[i].FullName),UpperCase(Campo)) <> 0) or (pos(' '+UpperCase(DataSource1.DataSet.Fields.Fields[i].FullName),UpperCase(Campo)) <> 0)
          Then Begin
            Campo:= TrimLeft(Campo);
            If (pos('.'+UpperCase(DataSource1.DataSet.Fields.Fields[i].FullName),UpperCase(Campo)) <> 0)
              Then Delete(campo,pos(',',campo),255)
              Else Delete(campo,pos(' ',campo),255);
            Break;
          End;
         End;
      if DataSource1.DataSet.Fields.Fields[i].DataType in ([ftString, ftFixedChar, ftWideString])
        Then ComboBoxMultiple2.Items.Add(DataSource1.DataSet.Fields.Fields[i].DisplayName+'|'+Campo+'|'+'Cadena'+'|'); //DataSource1.DataSet.Fields.Fields[i].FullName
      if DataSource1.DataSet.Fields.Fields[i].DataType in ([ftSmallint, ftInteger, ftWord, ftAutoInc, ftLargeint])
        Then ComboBoxMultiple2.Items.Add(DataSource1.DataSet.Fields.Fields[i].DisplayName+'|'+Campo+'|'+'Entero'+'|'); //DataSource1.DataSet.Fields.Fields[i].FullName
      if DataSource1.DataSet.Fields.Fields[i].DataType in ([ftFloat, ftCurrency, ftBCD])
        Then ComboBoxMultiple2.Items.Add(DataSource1.DataSet.Fields.Fields[i].DisplayName+'|'+Campo+'|'+'Real'+'|'); //DataSource1.DataSet.Fields.Fields[i].FullName
      if DataSource1.DataSet.Fields.Fields[i].DataType in ([ftDate, ftTime, ftDateTime, ftTimeStamp])
        Then ComboBoxMultiple2.Items.Add(DataSource1.DataSet.Fields.Fields[i].DisplayName+'|'+Campo+'|'+'Fecha'+'|'); //DataSource1.DataSet.Fields.Fields[i].FullName
      if DataSource1.DataSet.Fields.Fields[i].DataType in ([ftBoolean])
        Then ComboBoxMultiple2.Items.Add(DataSource1.DataSet.Fields.Fields[i].DisplayName+'|'+Campo+'|'+'Logico'+'|'); //DataSource1.DataSet.Fields.Fields[i].FullName
    End;
  Memo1.Lines.Clear;
  InicializaForma;
End;
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
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
Obtener el nombre del Adaptador de Red wpolanco Redes 0 17-05-2006 06:16:01
Obtener nombre de host con componentes ICS. ISKANDAR Internet 0 06-02-2006 21:12:16
Como puedo obtener el nombre de tabla(s) de una bd access ctronx Tablas planas 6 05-11-2004 19:19:36
Obtener el nombre de mi ejecutable jorch_yr Varios 3 29-05-2004 21:23:34
¿Se puede obtener el nombre de un handle? Al González API de Windows 5 23-12-2003 17:48:55


La franja horaria es GMT +2. Ahora son las 05:34:05.


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