Salve, grazie della sollecitudine nel rispondere. Errore mio comunque. In effetti la funzione GetTableNames funziona. Quella che da problemi e' GetColumnNames. Il tutto mi serve per costruire dinamicamente un menu popup con nomi tabelle e relativi campi
procedure TForm1.AggiornaMenuDBMemo;
var
tb,cp: TMenuItem;
t,c: string;
listatabelle,listacampi: TStringList;
begin
listatabelle:=TStringList.create;
listatabelle.Sorted:=true;
listacampi:=TStringList.create;
try
ZConnection1.GetTableNames('',listatabelle);
listatabelle.Delete(listatabelle.IndexOf('analisi'));
listatabelle.Delete(listatabelle.IndexOf('param'));
CampiDB.Clear;
for t in listatabelle do
begin
tb:=TMenuItem.Create(PopupMenu1);
tb.Caption:=UpperCase(t);
campiDB.Add(tb);
//----- senza la funzione StringReplace se nel nome tabella c'e' un underscore si genera un errore perche' l'underscore e' usato come carattere jolly
zconnection1.GetColumnNames(StringReplace(t,'_','/_',[rfReplaceAll]), '', listacampi);
for c in listacampi do
begin
cp:=TMenuItem.Create(PopupMenu1);
cp.Caption:=c;
cp.OnClick:=@ItemNomeCampoClick;
tb.Add(cp);
end;
end;
finally
listatabelle.free;
listacampi.free;
end;
end;
Se il nome tabella, di cui ottenere i nomi dei campi, contiene un underscore si ha un errore. Ora penso di aver capito. il carattere underscore e' usato come carattere jolly per passare una maschera e va "escappato" per "non dare fastidio", sostituendo gli underscore con il carattere di escape e underscore
zconnection1.GetColumnNames(StringReplace(t,'_','/_',[rfReplaceAll]), '', listacampi);
Ora il tutto funziona. Grazie comunque per l'attenzione