imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 17.10.2005, 14:21     # 1
FRiker
Newbie
 
Регистрация: 26.04.2005
Сообщения: 22

FRiker Путь к славе только начался
Delphi. Из текстового файла в базу Access.

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

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

Никак не могу разобраться с ADO. Связь с базой установил. Может кто подскажет где можно посмотреть исходник аналогичной программки, или как написать событие для кнопки?
FRiker вне форума  
Старый 17.10.2005, 14:50     # 2
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

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

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

и query->ExecSQL()
dyr_farot вне форума  
Старый 17.10.2005, 17:07     # 3
FRiker
Newbie
 
Регистрация: 26.04.2005
Сообщения: 22

FRiker Путь к славе только начался
Цитата:
Сообщение от 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()
А тут вообще ничего не понял: где именно это вписывать, и в какой форме...

Еще раз прошу меня извинить за ламерство. Просто появилась срочная необходимость в создании такой программы, а обратиться не к кому...
FRiker вне форума  
Старый 17.10.2005, 17:15     # 4
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
Код:
insert into ADOTable1 (Номер записи, Текст) values(:Номер записи, :Текст')
Цитата:
А тут вообще ничего не понял: где именно это вписывать, и в какой форме...
ты где-то файл читаеш?
вот после того, как отдну строку прочитал и пишеш...
( адаптирую: )
Код:
ADOQuery1.ParamByName('Номер записи')->Value = значение
ADOQuery1.ParamByName('Текст')->Value = значение
ADOQuery1.ExecSQL();
P.S.
а так ли тебе нужно импортировать програмно ( учитывая сложность базы ( точнее ее отсутствие ) и сложность реализации )
может проще самим аксесом импортировать?
dyr_farot вне форума  
Старый 18.10.2005, 10:37     # 5
FRiker
Newbie
 
Регистрация: 26.04.2005
Сообщения: 22

FRiker Путь к славе только начался
Код:
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'

Последний раз редактировалось FRiker; 18.10.2005 в 11:02.
FRiker вне форума  
Старый 18.10.2005, 11:51     # 6
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
ааа... еще Parameters нужно:
ADOQuery1.Parameters.ParamByName('Номер записи')->Value = y;
( я, обычно, с интербазой работаю... )
dyr_farot вне форума  
Старый 18.10.2005, 12:41     # 7
FRiker
Newbie
 
Регистрация: 26.04.2005
Сообщения: 22

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

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

Посмотри, пожалуйста внимательно на процедуру выше: возможно там я что-то не дописал или написал не так.
FRiker вне форума  
Старый 18.10.2005, 12:43     # 8
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
ааа... это билдера синитаксис. там точка должна быть:
DOQuery1.Parameters.ParamByName('Номер записи').Value = y;
dyr_farot вне форума  
Старый 18.10.2005, 13:14     # 9
FRiker
Newbie
 
Регистрация: 26.04.2005
Сообщения: 22

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


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

Последний раз редактировалось FRiker; 18.10.2005 в 13:38.
FRiker вне форума  
Старый 18.10.2005, 14:22     # 10
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

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

+ ( только щас дошло )
у тебя в базе таблица как зовется? ADOTable1 это ( как я понимаю ) в делфи имя таблицы...
dyr_farot вне форума  
Старый 18.10.2005, 14:56     # 11
FRiker
Newbie
 
Регистрация: 26.04.2005
Сообщения: 22

FRiker Путь к славе только начался
2 dyr_farot
В общем все получилось, наконец-то!!!
Изменил в таблице названия на Num и Text, в SQL-запросе написал:
Код:
  insert into Эдельвейс(Num, Text) values(:Num, :Text)
Все заработало. Еще раз огромное спасибо!
FRiker вне форума  
Старый 19.10.2005, 09:59     # 12
FRiker
Newbie
 
Регистрация: 26.04.2005
Сообщения: 22

FRiker Путь к славе только начался
Еще один маленький вопрос: А как составить запрос в базу, что бы присвоить переменной значение последней записи в счетчике (в моем случае это поле Num)?
FRiker вне форума  
Старый 19.10.2005, 11:37     # 13
dyr_farot
Advanced Member
 
Регистрация: 23.08.2003
Сообщения: 442

dyr_farot Нимб уже пробиваетсяdyr_farot Нимб уже пробивается
можеш просто поставить тип поля счетчит ( кажется так ) и в запросе на вставку его не указывать -- оно сгенерится само
dyr_farot вне форума  
Старый 19.10.2005, 12:14     # 14
FRiker
Newbie
 
Регистрация: 26.04.2005
Сообщения: 22

FRiker Путь к славе только начался
Цитата:
Сообщение от dyr_farot
можеш просто поставить тип поля счетчит ( кажется так ) и в запросе на вставку его не указывать -- оно сгенерится само
Ага, сделал.
Просто убрал счетчик из запроса:

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

Код:
insert into Эдельвейс(Text) values( :Text)
Спасибо!
FRiker вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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