2014-08-29 4 views
0

У меня проблема с оператором APPEND FROM в Visual FoxPro. Я не могу сделать APPEND из листа первенствовать, не получая эту ошибку:ПРИЛОЖЕНИЕ От листа excel дает странную ошибку

Function name is missing (

Я работаю по обработке некоторых устаревших данных, хранящихся в базе данных FoxPro. Я читаю его, обрабатывая его в .NET, а затем записываю его обратно в новую базу данных FoxPro. Однако часть письма не работает. К сожалению, использование другой базы данных не является вариантом. И да, я новичок FoxPro.

Я действительно получаю инструкции INSERT для работы, но было бы полезно, если бы я мог получить APPEND из внешнего файла для работы, а также уметь гидратировать поля memo. Afaik вы не можете сделать это с CSV-файлами в FoxPro, только с Excel и некоторыми другими форматами, но не с CSV.

Чтобы продемонстрировать проблему, я использую базу данных примеров адресной книги, которая поставляется с Visual Foxpro.

я запускаю этот запрос в окне запроса в V.FP:

USE "ADDRESS BOOK!ADDRESSES" 
APPEND FROM D:\tmp\excel_data2.xls FIELDS (addressid, firstname) DELIMITED XLS 

Файл .xls является Excel 97-2003 и выглядит следующим образом:

A | B 
------------------------ 
23 | Sample 1 
------------------------ 
24 | Sample 2 

Я думаю, синтаксис должен быть правильным в соответствии с этим документом: http://msdn.microsoft.com/en-us/library/aa977271(v=vs.71).aspx

Однако выполнение этого запроса просто дает мне ошибку «Имя функции отсутствует» («Я пробовал всевозможные перезаписи и varia которые я мог придумать, но я просто не могу понять, в чем проблема. Любая помощь будет оценена, спасибо.

+2

Вы пробовали его без скобок вокруг списка полей? Ошибка говорит: Обычно перед открывающей скобкой есть имя функции. –

+1

Вам не только нужны скобки, вы также должны удалить слово «DELIMITED». – LAK

+0

Спасибо за подсказку, я попробую это, когда вернусь на работу завтра! – Grubl3r

ответ

0

Не украсть шоу, но это, как я получил это работает:

Убедитесь, что файл XLS хранится в формате Excel 5.0/95 (в основном древний формат Excel, но более чем достаточно для ввода данных).

Закройте файл Excel, иначе вы получите сообщение об ошибке, когда файл заблокирован/открыт в другом приложении.

Я использовал следующий исправленный APPEND FROM заявление, и она работала:

USE "ADDRESS BOOK!ADDRESSES" 
APPEND FROM D:\tmp\excel_data2.xls FIELDS addressid, firstname XLS 
+0

Возможно, вам лучше использовать драйвер ODBC Excel, то есть пакет Microsoft Office Connectivity SDK, который позволит вам обрабатывать книгу как базу данных, запускать инструкции SELECT и т. Д. И работать со всеми форматами файлов Excel. –

+0

Я вижу, но могу ли я управлять программным обеспечением из приложения .NET? Мне нужно сделать некоторые автоматические операции с данными foxpro с минимальным человеческим взаимодействием. – Grubl3r

+0

Абсолютно - это 32-разрядный драйвер ODBC/OLEDB, например: http://c-sharp-tutorials-4-0.blogspot.ie/2012/05/connect-to-excel-using-odbc-in- c.html –

1

LAK был верным, но я уточню ваше приложение и возможные будущие встречи с импортом Excel. Если ваша таблица не соответствует порядку столбцов в Excel, вы можете столкнуться с проблемами. Обычно я импортирую курсор, который знает порядок и формат полей. Тогда я добавлю. После того, как вы разместите курсорную версию таблицы, я могу добавить ее в любую другую таблицу, прокрутить ее, очистить данные и т. Д.

Скажите, что ваша адресная таблица имеет структуру ID, LastName, FirstName, Address ... но ваш файл Excel имеет идентификатор, FirstName + LastName как одно поле, адрес, и вы знаете, что вам нужно будет проанализировать его в правильные первые/последние поля. Это будет хорошим примером использования промежуточного курсора. Если курсор имеет больше столбцов, чем Excel, они просто придут на поездку и будут пусты, но там, где нужно работать, как вам нужно.

create cursor C_TmpFromExcel; 
    (IDCol  int,; 
    FullName c(40),; 
    Address c(35),; 
    FirstName c(20),; 
    LastName c(20)) 

append from D:\tmp\excel_data2.xls type xls 

*/ VERY BASIC example to split the name 
replace all lastname with left(fullname, at("," , FullName) -1) 
replace all firstname with substr(fullname, at(",", FullName) +1) 

select LiveAddressTable 
append from C_TmpFromExcel 

При добавлении одной таблицы (или курсор) вместе с другим, VFP будет обрабатывать спичку теми же именами столбцов и игнорировать те, в которых столбец (ы) в противном случае дополнительные и не требуется (например, образец «FullName» column - vs FirstName, извлеченные как дополнительные).

+0

Это хороший трюк, но немного за пределами проблемы, которая у меня была. Но спасибо за подсказку! – Grubl3r