Форум: "Базы";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
ВнизКак добавить информацию в базу из файла Найти похожие ветки
← →
ShadowSnake (2002-12-27 09:27) [0]Как добавить информацию в базу из файла?
← →
Reindeer Moss Eater (2002-12-27 09:35) [1]Выполнить INSERT, UPDATE например
← →
Sergey13 (2002-12-27 09:37) [2]2ShadowSnake © (27.12.02 09:27)
>Как добавить информацию в базу из файла?
Из какого файла? И какую информацию?
← →
Дмитрий К.К. (2002-12-27 09:44) [3]
> ShadowSnake © (27.12.02 09:27)
> Как добавить информацию в базу из файла?
Минимум информации нам дашь - минимум получишь.
← →
ShadowSnake (2002-12-27 09:44) [4]Имеется текстовый файл примерно такого содержания:
............
192.168.99.1
192.168.99.2
192.168.99.3
192.168.99.4
192.168.99.5
............
Из него читаю в массив. Затем этот массив надо запихнуть в базу данных.
← →
Reindeer Moss Eater (2002-12-27 09:46) [5]Массив как единое целое, или его элементы?
← →
Alexander_K (2002-12-27 09:51) [6]Читаешь файл, полученные данные вставляешь в SQL-запрос и делаешь ExecSQL.
← →
ShadowSnake (2002-12-27 10:01) [7]2Reindeer Moss Eater
Как целое.
2Alexander_K
А как построить SQL запрос таким образом?
Да, может кто подскажет литературку по языку SQL? Желательно в сети.
← →
Alexander_K (2002-12-27 10:03) [8]Ты сначала лучше напиши: какие данные у тебя в файле, структуру таблицы и что в каких полях ты хочешь видеть!
← →
ShadowSnake (2002-12-27 10:08) [9]192.168.99.254 oleg 23/Dec/2002:21:15:12 http://counter.rambler.ru/top100.cnt?294098 200 936
вот такие данные. я их считал и рассовал по массивам. за это респект Reindeer Moss Eater :-)
таблица :
ip :: name :: date :: referer :: send :: recive
← →
Alexander_K (2002-12-27 10:18) [10]Пишешь запрос:
insert into tablename values(:ip,:name,:date,:referer,:send,:recive) и в цикле подставляешь значения из массива в параметры и делаешь ExecSQL. Все это делаешь пока не конец массива.
← →
ShadowSnake (2002-12-27 10:52) [11]
Query1.SQL.Add("INSERT INTO analiz_loc VALUES (i, ip[i], name[i], date[i], referer[i], send[i], rec[i]);");
что не так?
← →
passm (2002-12-27 10:56) [12]ShadowSnake © (27.12.02 10:52)> Не так.
См. <Alexander_K (27.12.02 10:18)> и TQuery.ParamByName
← →
ShadowSnake (2002-12-27 11:22) [13]
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"
← →
Наталия (2002-12-27 11:24) [14]почитай help по parambyname
← →
ShadowSnake (2002-12-27 11:25) [15]Мда. RTFM как говорится. А вот объяснить ошибку нельзя да? :-(
← →
Наталия (2002-12-27 11:44) [16]Объясняю:
Ты неправильно формируешь строку SQL-запроса. Есть 2 варианта:
или переводить данные к текстовому формату и заключать их в двойные кавычки, или, (грамотнее), использовать параметры, так как если ты будешь пользоваться первым способом,тогда тебе нужно думать о формате даты.
← →
Delirium^.Tremens (2002-12-27 11:44) [17]
> Мда. RTFM как говорится. А вот объяснить ошибку нельзя да?
> :-(
Подставляй параметрами - Alexander_K (27.12.02 10:18)
или так: "+#39+{Приведи к строке}ip[i]+#39+"
← →
ShadowSnake (2002-12-27 11:46) [18]Мда. Так я и не понял зачем нужно использовать 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:52) [19]
> И так тоже не получается. :-(
Params 0..5 или ParamByName("ip").AsString :=
← →
Prooksius (2002-12-27 12:05) [20]2 ShadowSnake © (27.12.02 11:46)
А что не получается? Что пишет?
М.Б. надо писать так:
insert into TableName
( ip, name, date, referer, send, rec)
values
(:ip,:name,:date,:referer,:send,:rec)
← →
ShadowSnake (2002-12-27 12:07) [21]Все. Всем спасибо. Все ок.
← →
Наталия (2002-12-27 12:08) [22]Типы параметров проверь. И если не получается, то какая ошибка.
← →
ScareCrow (2002-12-27 14:10) [23]Уважаемый 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 записей за разумное время;
← →
ShadowSnake (2002-12-27 15:01) [24]Мда. Теперь появилась другая проблема. Все время выскакивает ошибка о недостаточной памяти. После выполнения 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;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.008 c