powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / из *.txt d *.mdb
26 сообщений из 26, показаны все 2 страниц
из *.txt d *.mdb
    #32561517
Vladimir S.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как быстро это можно организовать, т.к. у меня ~170 тысячи записей и их надо раз в 2 дня загружать и удалять старые, как это сделать побыстрее ???

как я делал, так на это уходит минут 20 - это долго, т.к. импорт в аксесе это делает за 20 сек
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #32561819
Vladimir S.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
// Загрузка начисление в БД

PhoneList->Clear(); // очистим лист
//загрузка в память для обработки
PhoneList->LoadFromFile(strFN+"."+RegCodeList->Strings[j]);

ProgressBar->Max = PhoneList->Count;
ProgressBar->Position =  0 ;

for (int i =  0 ,counter =  1000 ;i < PhoneList->Count;i++)
{
 // разбиение строки - НАЧИСЛЕНИЯ
 strTemp = PhoneList->Strings;
 AnsiString s_phone,s_date,s_debt,s_curr,s_last;
 // Поле Phone
 s_phone = strTemp.SubString( 0 ,strTemp.Pos(";")- 1 );
 strTemp.Delete( 1 ,strTemp.Pos(";")); 
 // Поле debt
 s_date = strTemp.SubString( 0 ,strTemp.Pos(";")- 1 );
 strTemp.Delete( 1 ,strTemp.Pos(";"));
 // Поле debt
 s_debt = strTemp.SubString( 0 ,strTemp.Pos(";")- 1 );
 strTemp.Delete( 1 ,strTemp.Pos(";"));
 // Поле current_debt
 s_curr = strTemp.SubString( 0 ,strTemp.Pos(";")- 1 );
 strTemp.Delete( 1 ,strTemp.Pos(";"));
 // Поле lastname
 s_last = strTemp.SubString( 0 ,strTemp.Pos(";")- 1 );
 strTemp.Delete( 1 ,strTemp.Pos(";")); 
 // чтобы приложение не казалось повисшим
 if(  [i]--counter <= 0 )
 
 {
  counter =  1000 ;
  Application->ProcessMessages();
  ProgressBar->Position +=  1000 ;
 }
 // заливка данных
 Q->SQL->Clear();
 Q->SQL->Add("insert into tbl_tmp_debts (phone,debt_date,debt,current_debt,lastname)");
 Q->SQL->Add("values ("+s_phone+",'"+s_date+"',"+s_debt+","+s_curr+",'"+s_last+"')");
 Q->ExecSQL();
// закрывается главный FOR
}
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #32561841
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну естественно, что если записывать по одной записи, то будет долго.

Надо сделать это одним SQL-выражением. Например, для dbf->mdb это можно сделать так:
Код: plaintext
1.
INSERT INTO tab(fld1,fld2) 
 SELECT fld3,fld4 FROM [dBase III; database=dbFolder\].dbfile.dbf
У меня 10000 записей, втягивается за 0.3с.

Постараюсь проверить, будет ли это работать с текстовым драйвером и насколько быстро.
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #32561878
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в общем получилось. Вместо dbase III; надо писать Text;
Пришлось описать поля в источнике ODBC для "таблицы" dbFile.txt.
С разделителем "запятая" оно не хочет работать, а с полями фиксированной длины — хочет.
Скорость примерно та же.
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #32561925
Vladimir S.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а какой ты использовал драйвер в ODBC для текстового файла ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
из *.txt d *.mdb
    #33379508
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой Вэй
Надо сделать это одним SQL-выражением. Например, для dbf->mdb это можно сделать так:
Код: plaintext
1.
INSERT INTO tab(fld1,fld2) 
 SELECT fld3,fld4 FROM [dBase III; database=dbFolder\].dbfile.dbf
У меня 10000 записей, втягивается за 0.3с.

у меня такую строку не понимает:

...
FROM [dBaseIII; database=D:\].table1.dbf

говорит, что неправильно определен объект Parameter а параметром считает:
\].sprav.dbf
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33379629
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению не могу найти пример с текстовым файлом, наверно уже стёр. Но с dbf у меня это работает регулярно.

у меня такую строку не понимает:
...
FROM [dBaseIII; database=D:\].table1.dbf

говорит, что неправильно определен объект Parameter а параметром считает:
\].sprav.dbf

Откуда известно, что параметром считает именно "\].sprav.dbf"? Просьба скриншот сообщения в студию.
Как SQL-выражение подаётся на вход (написано в тексте программы как литерал)?
Вроде надо писать dBase III (через пробел).

Просьба отвечать здесь, я уже подписался на эту тему.
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33379679
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой, наврал безнадежно, прошу прощения!
на самом деле было так:

работаю в Builder 6.0
есть база e.mdb
надо из нее выгрузить одну из таблиц в dbf, например таблицу sprav
делаю все это через ADO

вопрос в том, что с mdb она работает через ADOConnection1 - через MS Jet, а с dbf - через ADOConnection2 - через ODBC.

делать пытаюсь через ADOQuery или ADOCommand... наверное не важно

какой должен быть текст запроса, чтоб скопировать поля, например, ARTICUL и NAME из sprav (e.mdb) в sprav.dbf ?

что должно быть Connection'ом для запроса?

INSERT INTO sprav
(
Articul,
Name
)

SELECT
ARTICUL,
NAME

FROM [dBase V;database='D:\'].sprav.dbf;
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33379734
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, где ответы на мои вопросы?

Во-вторых, вы хотите переписать данные из mdb в dbf
есть база e.mdb, надо из нее выгрузить одну из таблиц в dbf ,
а запрос пишете в обратную сторону.

В-третьих, явное указание в тексте запроса пути к базе данных DBF как раз и означает, что "Connection'ом для запроса" должна быть база mdb.
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33379813
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой ВэйВо-первых, где ответы на мои вопросы?

вопрос насчет параметра уже не актуален - он выдавал ошибку про неопределенный параметр, а в свойствах Parametres показывал
\].sprav.dbf
как параметр
если строка FROM была такая:
FROM [dBaseIII; database=D:\].sprav.dbf (насчет table1.dbf я как раз и "наврал")

SQL выражение передается свойством SQL ADOQuery либо свойством CommandText ADOCommand в Object Inspector'е


Во-вторых, вы хотите переписать данные из mdb в dbf
есть база e.mdb, надо из нее выгрузить одну из таблиц в dbf ,
а запрос пишете в обратную сторону.

ну да, конечно, просто на самом деле мне надо и из dbf в mdb и потом обратно из mdb в dbf... остановися на том, который из dbf в mdb.


В-третьих, явное указание в тексте запроса пути к базе данных DBF как раз и означает, что "Connection'ом для запроса" должна быть база mdb.

я так и думал...)
я понимаю, что все логично, но не понимаю почему на запрос
INSERT INTO spra (NAME)
SELECT NAME
FROM [dBase III;database='D:\x'].spra.dbf;
(перенес все в каталог D:\x для удобства, таблицу упростил до двух столбцов NAME и ARTICUL и переименовал в spra)

он выдает ошибку:
[ Строка "D:\x" задает ошибочный путь.Проверьте, что путь указан правильно и имеется подключение к серверу, на котором находятся файлы. ]
подключением к базе e.mdb, которая также расположенна в каталоге D:\x

вроде бы теперь без ошибок....
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33379910
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вот такая штука сработала!! ура!

INSERT INTO spra
(NAME, ARTICUL)

SELECT NAME,
ARTICUL

FROM spra

IN 'd:\x\e.mdb';

спасибо!! огромное!
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33379971
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
итак:

экспорт из mdb в dbf, ADOCommand:
INSERT INTO spra (NAME, ARTICUL)
SELECT NAME, ARTICUL
FROM spra
IN 'd:\x\e.mdb';

экспорт из dbf в mdb, ADOCommand:
INSERT INTO spra (NAME,ARTICUL) IN 'd:\x\e.mdb'
SELECT NAME,ARTICUL
FROM spra;

(Connection - к dbf'ке)

ура ура
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33380022
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо что получилось, конечно. Но так и не понятно, почему не работало. У меня работает.

INSERT INTO TTT(FFF1,FFF2)
SELECT FFF1,FFF2
FROM [dBase III; database=GGG\].XXX.dbf
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33380543
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
надо разобраться... сейчас сделаю один в один... что такое GGG? чему равно...
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33380623
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D:\x\e.mdb
D:\x\XXX.DBF
ADOCommand, в свойстве CommandText пишу:
INSERT INTO TTT(FFF1,FFF2)
SELECT FFF1,FFF2
FROM [dBase III; database='D:\x\'].XXX.DBF

та же ошибка:
[ Строка "D:\x\" задает ошибочный путь.Проверьте, что путь указан правильно и имеется подключение к серверу, на котором находятся файлы. ]

а если написать
FROM [dBase III; database=\].XXX.DBF
вылезает другая ошибка:
[ Объект 'XXX.DBF' не найдем ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.]
причем тут MS Jet? это же драйвер для mdb... это нормально, что он им ищет dbf'ку ?
как правильно прописать путь?
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381128
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если написать
FROM [dBase III; database=\].XXX.DBF
вылезает другая ошибка:
[ Объект 'XXX.DBF' не найдем ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.]
причем тут MS Jet? это же драйвер для mdb... это нормально, что он им ищет dbf'ку ?

Ты что, дразнишься? Сам же пишешь:
Код: plaintext
FROM [dBase III; database=\].XXX.DBF
. Что ей ещё искать, как не dbf?

что такое GGG? чему равно...
У меня именно так, т.е. относительный путь.

как правильно прописать путь?
Ну уж не знаю... я пишу путь, как видишь, без кавычек, хотя и не уверен, что с кавычками нельзя.
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381169
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы ничего не казалось, проверил насчёт полного пути и кавычек.

Просто полный путь -- работает.
Полный путь в одинарных кавычках -- "ошибочный путь".
Полный путь в двойных кавычках -- "недопустимое использование скобок".

Это не есть хорошо, т.к. в пути могут быть пробелы. Надо бы проверить...
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381180
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полный путь, в котором есть пробел (не на краю) и без кавычек -- нормально.
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381287
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой Вэй
Ты что, дразнишься? Сам же пишешь:
Код: plaintext
FROM [dBase III; database=\].XXX.DBF
. Что ей ещё искать, как не dbf?


что такое GGG? чему равно...
У меня именно так, т.е. относительный путь.

как правильно прописать путь?
Ну уж не знаю... я пишу путь, как видишь, без кавычек, хотя и не уверен, что с кавычками нельзя.
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381309
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(предыдущий пост случайный)
Ой Вэй
Ты что, дразнишься? Сам же пишешь:
Код: plaintext
FROM [dBase III; database=\].XXX.DBF
. Что ей ещё искать, как не dbf?

ну да, все правильно... не дразнюсь я


как правильно прописать путь?
Ну уж не знаю... я пишу путь, как видишь, без кавычек, хотя и не уверен, что с кавычками нельзя.
если я пишу полный путь D:\x
то он все, что после [ : ] принимает за имя параметра!
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381351
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с относительным путем работает!

INSERT INTO TTT(FFF1,FFF2)
SELECT FFF1,FFF2
FROM [dBase III; database=x\].XXX.DBF;

как написать FROM с абсолютным путем?
к базе D:\x\XXX.DBF ?
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381371
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой Вэй а если написать
FROM [dBase III; database=\].XXX.DBF
вылезает другая ошибка:
[ Объект 'XXX.DBF' не найдем ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.]
причем тут MS Jet? это же драйвер для mdb... это нормально, что он им ищет dbf'ку ?

Ты что, дразнишься? Сам же пишешь:
Код: plaintext
FROM [dBase III; database=\].XXX.DBF
. Что ей ещё искать, как не dbf?


просто мне казалось, что раз MS Jet - драйвер для mdb, а ODBC - для dbf, то и искать dbf он должен не ядром MS Jet, а при помощи ODBC... я не прав? как можно механизмом доступа с одному типу БД прочитать другой тип БД... разве можно при помощи MS Jet соединяться с dbf-базами?
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381445
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё раз повторю, что у меня работает и абсолютный, и относительный путь, но без кавычек.
Код: plaintext
FROM [dBase III; database=D:\Dir1\].File1.dbf
А если оно не находит ФАЙЛ (а не путь), то таки ты его указал неправильно.

На всякий случай уточню, что в программе на С, если путь пишется ручками, а не находится в строковой переменной, должен выглядеть как
Код: plaintext
"FROM [dBase III; database=D:\\Dir1\\].File1.dbf"
(двойной слэш)

просто мне казалось, что раз MS Jet - драйвер для mdb, а ODBC - для dbf, то и искать dbf он должен не ядром MS Jet, а при помощи ODBC... я не прав? как можно механизмом доступа с одному типу БД прочитать другой тип БД... разве можно при помощи MS Jet соединяться с dbf-базами?
Эх... если бы всё было так.
Во-первых, ODBC -- не для dbf, а для разных типов баз, на то он и "Open". Но MS Jet работает с dbf (а также с Excel, Text и кое-чем ещё) не через ODBC, а с помощью "ISAM". Попробуй написать не "database=...", a "DSN=...", что было бы логичнее для ODBC, и увидишь, что оно тебе скажет...
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381447
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще раз, итак...
на этот через Connection к mdb!

из dbf в mdb:
INSERT INTO TTTS(FFF1,FFF2)
SELECT FFF1,FFF2
FROM [dBase III; database=x\].XXXS.DBF;

из mdb в dbf:
INSERT INTO [dBase III; database=x\].XXXJ.DBF
SELECT FFF1,FFF2
FROM TTTJ

как тут прописать абсолютный путь? пример....
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33381466
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой Вэй
"FROM [dBase III; database=D:\\Dir1\\].File1.dbf"

забавно... так, он у меня \\Dir1\\].File1.dbf - считает параметром, то есть все, после двоеточия
...
Рейтинг: 0 / 0
из *.txt d *.mdb
    #33418201
kowarai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все! дошло! еще полдня убил на эту строчку...)))
дело было в том, что в Properties свойство ParamCheck стояло изначально в true и при введении абсолютного пути в строку FROM все символы, после двоеточия, Builder принимал за имя параметра, разумеется неопределенного нигде...
ParamCheck = false; и все работает!

FROM [dBase III; database=D:\\mydir].mytable.dbf
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / из *.txt d *.mdb
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]