es que no tiene mucho secreto mas...es aquella consulta, tal cual. te tendria que funcionar si la tabla no existe dentro de productos.dbf...a mi, al menos, me funciona asi, y lo uso bastante. Busca el parametro 'in' de sql, que es para acceder a bases de datos externas a la conectada (aunque es bastante entendible ya por los ejemplos) a ver si sacas algo en claro.
Te pongo un ejemplo en la que uso esta forma
Código Delphi
[-]
s := ExtractFileName(OpenDialog1.Filename); p := ExtractFilePath(OpenDialog1.Filename); ...
c.Connected := false; c.LoginPrompt := false;
c.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;'+
'Data Source='+ ExtractFilePath(OpenDialog1.Filename) + ';Mode=Share Deny None;Extended Properties="text;HDR=Yes;FMT=Fixed";'+
'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB
atabase Password="";'+
'Jet OLEDB:Engine Type=96;Jet OLEDB
atabase Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;'+
'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;'+
'Jet OLEDB:Encrypt Database=False;Jet OLEDB
on''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;'+
'Jet OLEDB:SFP=False';
c.Connected := true;
...
q.Connection := c; q.Active := false;
q.SQL.Text := 'select ' +
'id, '+
'cod_mar, ' +
'cod_fam, ' +
'IIF((select marge from MARQUES in ''' + str_articles + ''' where id = cod_mar),'+
'(select marge from MARQUES in ''' + str_articles + ''' where id = cod_mar),0) as marge_tmp, '+
'(select id_linia from FAMILIES in ''' + str_articles + ''' where id = cod_fam) as cod_lin, '+
'(select DESCR from FAMILIES in ''' + str_articles + ''' where id = cod_fam) as FAMILIA, ' +
'(select DESCR from MARQUES in ''' + str_articles + ''' where id = cod_mar) as MARCA, ' +
'Trim(IIF(DESCR1,Trim(DESCR1),'' '') + '' '' + IIF(DESCR2,Trim(DESCR2),'' '')) as DESCR,' +
'PMin, ' +
'PRec, ' +
'PBase, ' +
'iif(iif(PMin > PRec,PMin,PRec) = 0, PBASE * 116/(100 - marge_tmp),iif(PMin > PRec,PMin,PRec)) as PVP,'+
'iif(stock = ''&'',true,false) as STOCK ' +
'into ARTICLES_TMP in ''' + str_articles + ''' from ' + s;
q.ExecSQL;
...
como ves, en esencia es lo mismo que te he puesto, solo que calcula los argumentos que necesito. A ver si el unico problema que vas a tener es que usas las comillas dobles. Prueba de hacer + QuotedStr(Ruta_archivo_destino,'''') o bien poner las comillas tal como se ponen en una cadena (''')