2013-05-27 3 views
0

Я кодирую программу на Visual FoxPro, которая извлекает данные из файлов .DBF, и у меня есть некоторые проблемы с SQL-запросом. Моя программа получает некоторый вклад от пользователя, в основном, время начала и окончания и даты.Пытается получить доступ к полю с помощью команды textmerge

Моя проблема в том, что я использую команду TEXTMERGE() внутри запроса INNERJOIN, который сам по себе находится в цикле. Однако я не могу установить связь между двумя таблицами. Код, который вызывает у меня проблемы, - это что-то вроде:

SELECT Field1,Field2,Field3 FROM Table1 INNER JOIN TEXTMERGE("StrPath\Table<<i>>.DBF") ON Table1.Field1 = TEXTMERGE("StrPath\Table<<i>>.Field1") 

с i, являющимся инкрементной переменной цикла.

Я знаю, что это последняя часть, которая вызывает у меня проблемы, но я не смог найти решение.

Заранее за вашу помощь.

ответ

1

Выполнение вызова textmerge для запроса соединения звучит действительно уродливо. Тем не менее, похоже, что у вас несколько таблиц одинаковой структуры и вы пытаетесь найти общие записи, например, между табличными данными, которые были разделены между годами или компаниями. Так как вы уже в петле «я», почему бы не попробовать сделать что-то вроде ...

for i = 2 to whatEverRange 
    lcOtherTable = "strPath\Table" + allt(str(i)) 

    select T1.Field1, T1.Field2, T1.Field3; 
     from Table1 T1; 
     inner join (lcOtherTable) TX; 
      on T1.Field1 = TX.Field1; 
     into cursor C_WhateverTempResultSet 

    if reccount("C_WhateverTempResultSet") > 0 
     */ Do whatever with results 

    endif 
endfor 

The (переменная скобка) будет открыть таблицу вы хотите, просто дать ему упрощенную «псевдоним» (через TX), поэтому вам не нужно ничего делать с EVAL. Правильная «другая» таблица будет использоваться с псевдонимом «TX», ваша команда «ON» может присоединиться к T1.Field1 к TX.Field1 ... гораздо проще читать и отлаживать.

+0

Большое спасибо, это работает очень хорошо. Я знал, что есть менее грязный способ работать над этим, но я не мог его найти. –

0

Следующие будут работать.

SELECT Field1,Field2,Field3 
FROM Table1 INNER JOIN TEXTMERGE("StrPath\Table<<i>>.DBF") 
ON Table1.Field1 = EVAL(JUSTSTEM(JUSTFNAME(TEXTMERGE("StrPath\Table<<i>>"))) + [.Field1]) 
+0

Я не пробовал вашу технику, но спасибо за ответ в любом случае! –

Смежные вопросы