PDA

Ver la Versión Completa : asistente de SQL


atrus
26-05-2007, 01:18:48
Hola a todos,
estoy haciendo un asistente automatico de consultas sql como el que tiene el acces, pero no se me aocurre como hacerlo en delphi, mi pregunta es si para hacer inner joins automaticos hay alguna manera de detectar las relaciones que hau entre tablas con el delphi?
tengo dos listbox con multiselect, uno con las tablas y el otro con los fields de estas, y voy montando la consulta a medida que se va pulsando en ellas, no se si es el mejor planteamiento pero es lo que se me ha ocurrido.

graicas a todos por vuestro tiempo.

jachguate
26-05-2007, 02:32:38
Depende del motor que uses, si cumple con el estándar SQL esta información está en el diccionario de datos.

No puedo dar mas información, porque desconozco los datos mínimos para hacerlo.

Hasta luego.

;)

VaMPiRu
26-05-2007, 02:38:53
Depende del motor que uses, si cumple con el estándar SQL esta información está en el diccionario de datos.

Está usando el MS Access... :rolleyes:

La cuestión es si con dicho motor se puede conseguir lo que propone el compañero sin tener que recurrir a recorridos anidados entre los campos de las tablas seleccionadas comparando el nombre de los campos (PK y FK tienen mismo nombre) para saber si existe relación o no.

Gracias =)

PD: Datos, usando Delphi 6 SP2 (con componentes base, sin posibilidad de añadir de terceros), Access 2003, conectando con los ADO.

jachguate
26-05-2007, 02:40:01
Está usando el MS Access... :rolleyes:
:confused: ¿de donde sacas eso? :confused:

atrus
26-05-2007, 02:41:15
El motor, como ha dicho Vampiru es Access, perdona por la falta de información, el problema es que en el asistente nos piden hacer Inner Joins y no se como hacerlo, si alguien propone una idea, lo agradeceria mucho....

jachguate
26-05-2007, 03:10:14
Podes hacer inner joins aún entre tablas que no tengan definida una relación (integridad referencial).

Por otro lado, Desconozco si access tiene un diccionario de datos accesible via sql.

Hasta luego.

;)

atrus
26-05-2007, 03:26:10
muchas gracias jachguate (http://www.clubdelphi.com/foros/member.php?u=195), de todos modos posteo el codigo y a ver si alguien me puede ayudar, porqué no se me ocurren ideas, espero que esto esté permitido.
voy cogiendo de un combobox las tablas i de otro los campos i voy creando la sentencia.

procedure TP09_MENU_PRINCIPAL.cmb_taulaChange(Sender: TObject);
begin

cmb_camp.ItemIndex:=-1;
adoc1.GetFieldNames(cmb_taula.Items[cmb_taula.itemindex],cmb_camp.Items); //carga los campos de las tablas al combobox
if (icont=0) then begin//si no hay nada en la parte del from entonces insertara el primero
sfrom := cmb_taula.Items[cmb_taula.itemindex];
end;

if (icont=1) then begin
sfrom := sfrom+', '+cmb_taula.Items[cmb_taula.itemindex];
end;
icont:=1;

end;

procedure TP09_MENU_PRINCIPAL.cmb_campChange(Sender: TObject);
begin
if (icont_field=0) then begin
sselect :=cmb_camp.Items[cmb_camp.itemindex];
end;

if (icont_field=1) then begin
sselect :=sselect+', '+cmb_camp.Items[cmb_camp.itemindex];
end;

icont_field:=1;
end;

procedure TP09_MENU_PRINCIPAL.btn3Click(Sender: TObject);
begin
mem1.Lines.Text := 'select '+sselect+' from '+sfrom;
end;

Lepe
26-05-2007, 12:06:10
Para construir los SQL en tiempo de ejecución revisa este hilo (http://www.clubdelphi.com/foros/showthread.php?p=203914#post203914), quizás te sirva.

Saludos