Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta sobre ComboBox y Sql... (https://www.clubdelphi.com/foros/showthread.php?t=71933)

verito_83mdq 19-01-2011 13:22:40

Consulta sobre ComboBox y Sql...
 
Buenas a todos!! Espero que anden bien!! El problema que tengo es el siguiente,
en un form tengo 3 ComboBox que se llenan con sentencias Sql, a medida que
se eligen los item de los ComboBox se llenan los otros. Este es el primer Combo
que se llena cuando se crea el Form,con este código solo llena el Primero ComboBox


Código SQL [-]
'sql'>
Código SQL [-]
'keywordsql'>procedure TDatosVentasForm.FormCreate(Sender: TObject); 
'keywordsql'>begin 
 
               CiudadComboBox.Enabled:=False; 
               SucursalComboBox.Enabled:=False; 
 
 
            //Empresa ComboBox 
 
           'keywordsql'>with QueryDataModule.EmpresaZQuery 'keywordsql'>do 
              'keywordsql'>begin 
                'keywordsql'>If 'keywordsql'>active 'keywordsql'>then close; 
                SQL.Clear; 
                SQL.'keywordsql'>Add('quotesql'>'Select * from empresa Order By Nombre'); 
                Open; 
                  'keywordsql'>While 'keywordsql'>not QueryDataModule.EmpresaZQuery.Eof 'keywordsql'>do 
                     'keywordsql'>begin 
                         EmpresaCombobox.Items.'keywordsql'>Add(QueryDataModule.EmpresaZQuery.FieldByName('quotesql'>'Nombre').Text); 
                         QueryDataModule.EmpresaZQuery.Next; 
                     'keywordsql'>end; 
 
 
              'keywordsql'>end;
Una vez que se selecciona la empresa viene este código, Con este código se selecciona la empresa y se fija en la tabla Sucursales todas las sucursales de la empresa ordenados por ciudad. Por Ejemplo la Empresa 'xx' tiene 3 sucursales en Roma y dos en Bari entonces yo quiero saber de las sucursales de Roma la dirección entonces viene esta otra consulta: procedure TDatosVentasForm.EmpresaComboBoxChange(Sender: TObject); begin CiudadComboBox.Enabled:=True; CiudadCombobox.Items.Clear; SucursalComboBox.Items.Clear; with QueryDataModule.EmpresaZQuery do begin If active then close; SQL.Clear; SQL.Add('Select * from empresa where Nombre= '''+ EmpresaCombobox.Text +''' '); Open; end; em:=QueryDataModule.EmpresaZQuery.FieldByName('ID_Empresa').Value; with QueryDataModule.SucursalesZQuery do begin If active then close; SQL.Clear; SQL.Add('Select Distinct ID_Ciudad from sucursal where ID_Empresa ='+em+''); Open; While not QueryDataModule.SucursalesZQuery.Eof do begin CiudadCombobox.Items.Add(QueryDataModule.SucursalesZQuery.FieldByName('ID_Ciudad').Text); QueryDataModule.SucursalesZQuery.Next; end; end; ci:=QueryDataModule.SucursalesZQuery.FieldByName('ID_Ciudad').Text end;




Esta Consulta selecciona la dirección de la sucursales de Roma de la
Empresa 'xx' entonces llena el ultimo ComboBox con las direcciones
y yo elijo la sucursal que quiero.

Código SQL [-]
SucursalComboBox.Enabled:=True; 
               SucursalComboBox.Items.Clear; 
 
 
           with QueryDataModule.SucursalesZQuery do 
              begin 
                If active then close; 
                  SQL.Clear; 
                  SQL.Add('Select *  from sucursal where ID_Empresa ='+em+' and ID_Ciudad='+ci+''); 
                  Open; 
                     While not QueryDataModule.SucursalesZQuery.Eof do 
                       begin 
                         SucursalComboBox.Items.Add(QueryDataModule.SucursalesZQuery.FieldByName('Direccion').Text); 
                         QueryDataModule.SucursalesZQuery.Next; 
                       end; 
              end;



Osea el problema esta que la variable ''+ci+' tiene que pasar varios
registros y no se como hacer esto! Se entendió??
Fue larga la explicación pude ir directamente al grano pero quería que
entiendan bien lo que quiero hacer . Espero que me puedan dar una mano,
cualquier cosa que no entiendan no me molesta explicar las veces que haga falta.:p
Gracias!!!!!!!!!!!!!!

Aleca 19-01-2011 14:02:20

no entendí porque ci tiene que pasar varios registros? :confused:

verito_83mdq 19-01-2011 14:13:01

Gracias Aleca!! La variable ci tiene que pasar las diferentes ciudad en donde se encuentra la empresa, Supongamos La empresa 'zz' tiene sucursales en Bahia Blanca, Rosario, Miramar.
En sql yo hago
Código SQL [-]
 Select Distinct ID_Ciudad from sucursal where ID_Empresa =2;
Acá sale los ID de las 3 ciudades (las ciudades las tengo en una tabla aparte) . El problema es que yo necesito guardar esos 3 Id en este caso, pero pueden ser mas o menos y después hacer otra consulta, y la variable solo me guarda el ultimo ID.
Se entendió?

verito_83mdq 19-01-2011 15:44:31

Nadie me puede dar una mano? :(

Aleca 19-01-2011 15:54:03

Cita:

Empezado por verito_83mdq (Mensaje 387968)
Gracias Aleca!! La variable ci tiene que pasar las diferentes ciudad en donde se encuentra la empresa, Supongamos La empresa 'zz' tiene sucursales en Bahia Blanca, Rosario, Miramar.

En sql yo hagoCódigo SQL [-] Select Distinct ID_Ciudad from sucursal where ID_Empresa =2;


Acá sale los ID de las 3 ciudades (las ciudades las tengo en una tabla aparte) . El problema es que yo necesito guardar esos 3 Id en este caso, pero pueden ser mas o menos y después hacer otra consulta, y la variable solo me guarda el ultimo ID.
Se entendió?

las diferentes ciudades las podes guardar en un TStringList o un Array asi armas la consulta recorriendo la lista.
Código Delphi [-]
  for i := 0 to Lista.Count -1 do
    if i = Lista.Count - 1
      SQL.Add('ID_CIUDAD = ' + Lista[i]
    else
     SQL.Add('ID_CIUDAD = ' + Lista[i] + ' or '
algo asi seria, lo estoy haciendo de memoria y sin probarlo.

urixiv 19-01-2011 15:58:25

No sé si te he entendido bien... pero el caso es que quieres hacer una select en la que un campo lo quieres filtrar por más de un valor?
Si es eso yo te aconsejo que en vez de hacer un "=" hagas un "in".
es decir
Código SQL [-]
ciudad in (valor1, valor2, valor3)
Los valores entiendo que los tienes o los puedes sacar haciendo una consulta y montando tu mismo el string...
espero haberte podido ayudar!
Si no es eso, lo siento! :p

verito_83mdq 19-01-2011 16:17:05

Me parece que entre lo que aporto urixiv y Aleca algo va a salir,:D.
Primero tendría que solucionar el tema de que en una variable guarde varios registros y lo que dijo Aleca me parece buena esa idea, una vez que tenga solucionado eso la consulta la tendría que hacer como dijo urixiv.
Vamos a ver que sale de esto!! Gracias chicos.! Cualquier cosa los vuelvo a molestar! :p

ppalmamichi 20-01-2011 02:09:42

mejor utiliza DbLookUpComboBox asi haces:
- una consulta para mostrar las ciudades
- una consulta para mostrar sucursales y al mismo tiempo ten un DBEdit para que muestre la direccion de la sucursal que elijas en este DbLookUpComboBox.

con esto es mas simple.

espero me haya explicado.

verito_83mdq 20-01-2011 02:53:21

Hola ppalmamichi!!! Espere que estés bien, antes que nada gracias por aportar esa idea.
Ahora bien el comboBoxlooup no lo use porque quiero trabajarlo con instrucciones Sql, sin poner la tabla en modo insert.
Hasta donde yo se el comboBoxlooup hay que conectarlo a un datasource y este a la tabla, vos me querés decir que puedo conectarlos a un query?? Nunca probé.. como seria eso?

ppalmamichi 20-01-2011 03:33:29

enlazas tu Query con un datasource al DBLookUpComboBox y configuras las siguientes propiedades de este:

ListSource: Datasource
keyfield: el campo pk
lisfield: el campo que quieres que se muestre en el combo.

y un DBEdit tambien enlazado al datasource mostrando el campo direccion. para que cuando seleccionen la ciudad en el combo, el dbedit muestre la direccion.

saludos.


La franja horaria es GMT +2. Ahora son las 13:17:38.

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