![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выгрузка из датасета через ODBC и ADO в разные форматы
Циркуль © (2007-12-26 16:13:00)Есть такая задача - выгружать в файл некий датасет (не АДОшный) в соответствии с заданной пользователем ADOшной ConnectionString, которую тот может самостоятельно собрать.
Т.е., если, например, поступит следующая COnnectionString:
DRIVER=Microsoft Text Driver (*.txt; *.csv)
UID=admin
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=8
MaxBufferSize=2048
FIL=text
Extensions=None,asc,csv,tab,txt
DriverId=27
DefaultDir=C:\DEV\TestProjects\ADO
то нужно будет спросить пользователя имя файла, и под этим именем в папке "C:\DEV\TestProjects\ADO" создать текcтовый файл, содержащий данные из исходного датасета.
Сделал на пробу так:
procedure TForm1.Button2Click(Sender: TObject);
var
I: Integer;
S: string;
begin
s := '';
for I := 1 to 2000 do
S := S + '0';
ADOCommand1.CommandText := 'create table [table_3#txt] (ID integer, AName LONGCHAR, Montant currency)';
ADOCommand1.Execute;
ADOCommand1.CommandText := Format('insert into [table_3#txt] (ID, AName, Montant) values (1, ''%s'', 100.1)', [s]);
ADOCommand1.Execute;
end;
Вроде выгрузилось нормально.
Но, если изменить имя столбца, например
...
ADOCommand1.CommandText := 'create table [table_3#txt] (ID integer, AName2 LONGCHAR, Montant currency)';
...
ADOCommand1.CommandText := Format('insert into [table_3#txt] (ID, AName2, Montant) values (1, ''%s'', 100.1)', [s]);
...
то при попытке повторной выгрузки (удалив предварительно получившийся вначале table_3.txt) получаем сообщение
"[Microsoft][Драйвер ODBC Текст] Объект 'table_3.txt' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути."
Меняем название столбца на исходное, или меняем название файла на другое - все работает.
Циркуль (2007-12-26 16:19:00) [1]И еще, я так понял, что в случае
DRIVER=Microsoft Excel Driver (*.xls)
экселевский файл, куда будет выгружен датасет уже должен к этому моменту существовать. Т.е. нет возможности запросом типа "create database db1" создать файл db1.xls и уже в него делать "create table ..." и прочие insert'ы?
И еще, для всех типов jet драйверов придется по-разному собирать запрос, т.е. напримет для текстовых использовать тип данных LONGCHAR, а для Excel или dbf - MEMO и т.п. ?