Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как добавить информацию в базу из файла [D6, Paradox]


Страницы:   1 2

ShadowSnake ©   (2002-12-27 09:27:00) 

Как добавить информацию в базу из файла?


ShadowSnake   (2002-12-27 15:01:00) [1]

Мда. Теперь появилась другая проблема. Все время выскакивает ошибка о недостаточной памяти. После выполнения 3-4 SQL запросов говорит что недостаточно памяти. И как то все так криво работает. Может конечно и я что начудил. Но все делаю по мануалу. 1-2 запроса работают нормально, а потом начинается ерунда какая то. Дошел до того, что уже и запросы то не выполняются. Вот:
Error: DataSource1: Circular datalink are not allowed

Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Add("SELECT DISTINCT Name");
Query2.SQL.Add("FROM ":analiz_loc:analiz.DB"");
Query2.SQL.Add("WHERE");
Query2.SQL.Add("(Name = "oleg ")"); {"oleg " именно с пробелом, это не ошибка}
Query2.SQL.Add("ORDER BY Name");
Query2.ExecSQL;
DataSource1.DataSet:=Query2;


ScareCrow   (2002-12-27 14:10:00) [2]

Уважаемый ShadowSnake!!!

Если Ваш текстовый файл (назову его Source.txt) имеет фиксированную структуру,то я рекомендую вам использовать такое решение:

1.На форму положите компонент типа TTable (назовем его tbSourceTXT);

2.tbSourceTXT.TableType:=ttASCII;
2.1.Оч.важно!!! Предварительно создаем файл схему для Вашего текстового файла: будет называться, соответственно Source.schВот его содержимое:

[Source]
Filetype=Fixed
Field1=F1,Char,15,00,00
Field2=F2,Char,20,00,15
Field3=F3,Char,02,00,35
| |
| с какого символа стоки начинается поле
|
это размер поля

3.Кладем на форму компонент типа TBatchMove(назовем его bmFromTXTtoPARADOX);

4.bmFromTXTtoPARADOX.Source:=tbSourceTXT;
bmFromTXTtoPARADOX.Destination:=tbYourPARADOX;

5.Определяем bmFromTXTtoPARADOX.Mappings и bmFromTXTtoPARADOX.Mode;

6.В проге (без всяких циклов,SQL и ненужной траты времени!!!)
делаем bmFromTXTtoPARADOX.Execute.Работает, как Вы сами можете догадаться быстро: я таким способом перекачивал 200000 записей за разумное время;


Наталия   (2002-12-27 12:08:00) [3]

Типы параметров проверь. И если не получается, то какая ошибка.


ShadowSnake   (2002-12-27 12:07:00) [4]

Все. Всем спасибо. Все ок.


Prooksius   (2002-12-27 12:05:00) [5]

2 ShadowSnake © (27.12.02 11:46)
А что не получается? Что пишет?
М.Б. надо писать так:

insert into TableName
( ip, name, date, referer, send, rec)
values
(:ip,:name,:date,:referer,:send,:rec)


Delirium^.Tremens   (2002-12-27 11:52:00) [6]


> И так тоже не получается. :-(

Params 0..5 или ParamByName("ip").AsString :=


ShadowSnake   (2002-12-27 11:46:00) [7]

Мда. Так я и не понял зачем нужно использовать parambyname.

for i:=1 to n do begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("INSERT");
Query1.SQL.Add("INTO ":analiz_loc:analiz.db"");
Query1.SQL.Add("VALUES(:ip,:name,:date,:referer,:send,:rec);");
Query1.Params[1].AsString := ip[i];
Query1.Params[2].AsString := name[i];
Query1.Params[3].AsString := date[i];
Query1.Params[4].AsString := referer[i];
Query1.Params[5].AsString := send[i];
Query1.Params[6].AsString := rec[i];
Query1.ExecSQL;
end;


И так тоже не получается. :-(


Delirium^.Tremens   (2002-12-27 11:44:00) [8]


> Мда. RTFM как говорится. А вот объяснить ошибку нельзя да?
> :-(

Подставляй параметрами - Alexander_K (27.12.02 10:18)
или так: "+#39+{Приведи к строке}ip[i]+#39+"


Наталия   (2002-12-27 11:44:00) [9]

Объясняю:
Ты неправильно формируешь строку SQL-запроса. Есть 2 варианта:
или переводить данные к текстовому формату и заключать их в двойные кавычки, или, (грамотнее), использовать параметры, так как если ты будешь пользоваться первым способом,тогда тебе нужно думать о формате даты.


ShadowSnake   (2002-12-27 11:25:00) [10]

Мда. RTFM как говорится. А вот объяснить ошибку нельзя да? :-(


Наталия   (2002-12-27 11:24:00) [11]

почитай help по parambyname


ShadowSnake   (2002-12-27 11:22:00) [12]


Query1.Close;
Query1.SQL.Clear;
for i:=1 to n do begin
{Query1.SQL.Add("INSERT INTO analiz_loc VALUES (ip[i], name[i], date[i], referer[i], send[i], rec[i]);");}
Query1.SQL.Add("INSERT");
Query1.SQL.Add("INTO ":analiz_loc:analiz.db"");
Query1.SQL.Add("VALUES("+ip[i]+", "+name[i]+", "+date[i]+", "+referer[i]+", "+send[i]+", "+rec[i]+");");
end;
Query1.ExecSQL;


Сделал так. Но говорит ошибка "invalid use keyword. token: 99.254"


passm   (2002-12-27 10:56:00) [13]

ShadowSnake © (27.12.02 10:52)> Не так.
См. <Alexander_K (27.12.02 10:18)> и TQuery.ParamByName


ShadowSnake   (2002-12-27 10:52:00) [14]

Query1.SQL.Add("INSERT INTO analiz_loc VALUES (i, ip[i], name[i], date[i], referer[i], send[i], rec[i]);");

что не так?


Alexander_K   (2002-12-27 10:18:00) [15]

Пишешь запрос:
insert into tablename values(:ip,:name,:date,:referer,:send,:recive) и в цикле подставляешь значения из массива в параметры и делаешь ExecSQL. Все это делаешь пока не конец массива.


ShadowSnake   (2002-12-27 10:08:00) [16]

192.168.99.254 oleg 23/Dec/2002:21:15:12 http://counter.rambler.ru/top100.cnt?294098200 936

вот такие данные. я их считал и рассовал по массивам. за это респект Reindeer Moss Eater :-)

таблица :
ip :: name :: date :: referer :: send :: recive


Alexander_K   (2002-12-27 10:03:00) [17]

Ты сначала лучше напиши: какие данные у тебя в файле, структуру таблицы и что в каких полях ты хочешь видеть!


ShadowSnake   (2002-12-27 10:01:00) [18]

2Reindeer Moss Eater
Как целое.

2Alexander_K
А как построить SQL запрос таким образом?

Да, может кто подскажет литературку по языку SQL? Желательно в сети.


Alexander_K   (2002-12-27 09:51:00) [19]

Читаешь файл, полученные данные вставляешь в SQL-запрос и делаешь ExecSQL.


Reindeer Moss Eater   (2002-12-27 09:46:00) [20]

Массив как единое целое, или его элементы?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо