IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Delphi. Из текстового файла в базу Access. (https://www.imho.ws/showthread.php?t=94335)

FRiker 17.10.2005 14:21

Delphi. Из текстового файла в базу Access.
 
Всем привет!
Догадываюсь, что вопрос - элементарный, тем не менее очень нужна помощь.
Требуется перегнать текстовый файл в базу Access.
Текстовый файл представляет собой:
...
текст
<разделитель>
текст
<разделитель>
...

В базе все это дожно выглядеть, как множество записей, содержащих этот самый текст...

Никак не могу разобраться с ADO. Связь с базой установил. Может кто подскажет где можно посмотреть исходник аналогичной программки, или как написать событие для кнопки?

dyr_farot 17.10.2005 14:50

если Connection есть осталось написать запрос для вставки для чего вешаем на форму TADOQuery. в его Connection пишеш свою Connection. в запросе ( свойство SQL ) пишеш insert into имя_таблицы (список полей, разделенный ,) values(тот же список, только перед каждым элементом поставить ':' )

ну а потом в цикле для всех записей делаеш
query->ParamByName(то, что после ':')->Value = значение
...
query->ParamByName(то, что после ':')->Value = значение

и query->ExecSQL()

FRiker 17.10.2005 17:07

Цитата:

Сообщение от dyr_farot
если Connection есть осталось написать запрос для вставки для чего вешаем на форму TADOQuery. в его Connection пишеш свою Connection. в запросе ( свойство SQL ) пишеш insert into имя_таблицы (список полей, разделенный ,) values(тот же список, только перед каждым элементом поставить ':' )

ну а потом в цикле для всех записей делаеш
query->ParamByName(то, что после ':')->Value = значение
...
query->ParamByName(то, что после ':')->Value = значение

и query->ExecSQL()

Большое спасибо за отклик!
К сожалению, плохо ориентируюсь в вопросе, поэтому нельзя ли по-подробней:
Цитата:

в запросе ( свойство SQL ) пишеш insert into имя_таблицы (список полей, разделенный ,) values(тот же список, только перед каждым элементом поставить ':' )
В окне Form1.ADOQuery1.SQL ввожу:

insert into ADOTable1('Номер записи','Текст')values(':Номер записи',':Текст')

так?

Цитата:

query->ParamByName(то, что после ':')->Value = значение
...
query->ParamByName(то, что после ':')->Value = значение

и query->ExecSQL()
А тут вообще ничего не понял: где именно это вписывать, и в какой форме...

Еще раз прошу меня извинить за ламерство. Просто появилась срочная необходимость в создании такой программы, а обратиться не к кому...

dyr_farot 17.10.2005 17:15

Код:

insert into ADOTable1 (Номер записи, Текст) values(:Номер записи, :Текст')
Цитата:

А тут вообще ничего не понял: где именно это вписывать, и в какой форме...
ты где-то файл читаеш?
вот после того, как отдну строку прочитал и пишеш...
( адаптирую: )
Код:

ADOQuery1.ParamByName('Номер записи')->Value = значение
ADOQuery1.ParamByName('Текст')->Value = значение
ADOQuery1.ExecSQL();

P.S.
а так ли тебе нужно импортировать програмно ( учитывая сложность базы ( точнее ее отсутствие ) и сложность реализации )
может проще самим аксесом импортировать?

FRiker 18.10.2005 10:37

Код:

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, FMTBcd, SqlExpr;

Вот, как у меня выглядит обработка кнопки:

Код:

procedure TForm1.Button1Click(Sender: TObject);
var
  FileSource : textfile;
  str : string;
  buf : string;
  x:integer;
  y: string;
begin
 assignfile(filesource,'1.txt');
 reset(filesource);
 while not eof(filesource) do begin
 inc(x);
 y:=IntToStr(x);
 repeat
 readln(filesource,str);
 buf:=buf+str;
 Until Str=razdel;

ADOQuery1.ParamByName('Номер записи')->Value = y;
ADOQuery1.ParamByName('Текст')->Value = buf;
ADOQuery1.ExecSQL();

end;
CloseFile(filesource);
end;

При компиляции, возникает ошибка: Undecrlared identifier: 'ParamByName'

dyr_farot 18.10.2005 11:51

ааа... еще Parameters нужно:
ADOQuery1.Parameters.ParamByName('Номер записи')->Value = y;
( я, обычно, с интербазой работаю... )

FRiker 18.10.2005 12:41

2dyr_farot огромное спасибо за терпение!
Давай уж добьем до конца?

Значит, исправил, получилось:
Код:

ADOQuery1.Parameters.ParamByName('Номер записи')->Value = y;
Компилирую, спотыкается на
Код:

->
Expression expected, but '>' found

Посмотри, пожалуйста внимательно на процедуру выше: возможно там я что-то не дописал или написал не так.

dyr_farot 18.10.2005 12:43

ааа... это билдера синитаксис. там точка должна быть:
DOQuery1.Parameters.ParamByName('Номер записи').Value = y;

FRiker 18.10.2005 13:14

Наконец-то скомпилировалась!
Однако, при нажатии кнопки вылетает с ошибкой: "Ошибка синтаксиса insert into", которое у меня выглядет так:


Код:

insert into ADOTable1(Номер записи, Текст) values(:Номер записи, :Текст)
Юзаю Яндекс по SQL-синтаксису и справочку от Microsoft, щас сам попробую разобраться.

dyr_farot 18.10.2005 14:22

есть у меня подозрение, что аксес не принимает ( просто так ) имена полей с пробелами -- засунь его в квадаратные скобки:
insert into ADOTable1([Номер записи], Текст) values(:[Номер_записи, :Текст)

+ ( только щас дошло )
у тебя в базе таблица как зовется? ADOTable1 это ( как я понимаю ) в делфи имя таблицы...

FRiker 18.10.2005 14:56

2 dyr_farot
В общем все получилось, наконец-то!!!
Изменил в таблице названия на Num и Text, в SQL-запросе написал:
Код:

  insert into Эдельвейс(Num, Text) values(:Num, :Text)
Все заработало. Еще раз огромное спасибо!

FRiker 19.10.2005 09:59

Еще один маленький вопрос: А как составить запрос в базу, что бы присвоить переменной значение последней записи в счетчике (в моем случае это поле Num)?

dyr_farot 19.10.2005 11:37

можеш просто поставить тип поля счетчит ( кажется так ) и в запросе на вставку его не указывать -- оно сгенерится само

FRiker 19.10.2005 12:14

Цитата:

Сообщение от dyr_farot
можеш просто поставить тип поля счетчит ( кажется так ) и в запросе на вставку его не указывать -- оно сгенерится само

Ага, сделал.
Просто убрал счетчик из запроса:

Код:

insert into Эдельвейс(Num, Text) values(:Num, :Text)
И оставил только:

Код:

insert into Эдельвейс(Text) values( :Text)
Спасибо!


Часовой пояс GMT +4, время: 18:38.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.