![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как добавить информацию в базу из файла [D6, Paradox]
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]Массив как единое целое, или его элементы?