Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2010, 13:25   #1
Poltev86
Пользователь
 
Аватар для Poltev86
 
Регистрация: 15.05.2010
Сообщений: 31
По умолчанию Из текстового файла в бд!!!

Доброе врямя суток!!! Подскажите пожалуйста...вообщем есть файл текстовой..из него нужно создать базу данных..задача какова каждые 16 строк текстового файла записывать в бд..вот примерно набрасал но не то получилось...
Код:
procedure TForm1.Button1Click(Sender: TObject);
 var i:integer;
       f:TStrings;
       s,s1:string;
begin
   OpenDialog1.InitialDir:=GetCurrentDir;
   if not OpenDialog1.Execute then  ShowMessage('Файл не найден!!!') else
     begin
      f:= TStringList.Create();
       f.LoadFromFile(OpenDialog1.FileName);

      begin

        for I := 0 to f.Count - 1 do    begin
            DataModule2.ADOTable1.Active:=true;
            DataModule2.ADOTable1.Insert;
               if (pos('п/дела',f.Strings[i])<>0)  then


             DataModule2.ADOTable1.FieldByName('npd').AsString:=copy(f.Strings[i],pos('п/дела',f.Strings[i])+7,Length('п/дела'));
             DataModule2.ADOTable1.FieldByName('st1').AsString:=copy(f.Strings[i],pos('уч.',f.Strings[i])-230,Length('п/дела')+1295);
       DataModule2.ADOTable1.Post;
         DataModule2.ADOTable1.Active:=false;
          s:=copy(f.Strings[i],pos('п/дела',f.Strings[i])+7,Length('п/дела'));
          //заносим в ячейку "ИмяПоля" значение переменной s
           // DataModule2.ADOTable1.FieldByName('nomer npd').AsString:= copy(f.Strings[i],pos('п/дела',f.Strings[i])-230,Length('п/дела')+1295);
          // s1.Text:=copy(f.Strings[i],pos('п/дела',f.Strings[i])-230,Length('п/дела')+1295);

           Memo1.Lines.Add(s);

  end;    end;
 end;
  //
    end;
end.
Poltev86 вне форума Ответить с цитированием
Старый 16.05.2010, 14:23   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

DataModule2.ADOTable1.Active:=true;
...
DataModule2.ADOTable1.Active:=false ;
вынести ЗА ЦИКЛ.

а в чём, собственно проблема?
Код похож на рабочий..
Вроде бы должно работать...
Как не работает? Ошибка? Или что?...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2010, 14:47   #3
Poltev86
Пользователь
 
Аватар для Poltev86
 
Регистрация: 15.05.2010
Сообщений: 31
По умолчанию

Ошибки нет на самом деле то)))) просто надо сделать как...вообщем 16 строк перегнать в 16 столбцов!!! а здесь получаеться что он копирует каждуй строку текстового файла в строку бд..

Последний раз редактировалось Poltev86; 16.05.2010 в 14:50.
Poltev86 вне форума Ответить с цитированием
Старый 16.05.2010, 14:56   #4
Poltev86
Пользователь
 
Аватар для Poltev86
 
Регистрация: 15.05.2010
Сообщений: 31
По умолчанию

Вот есть неплохой вариант он дольше конечно...но тут я столкнулся с другой проблемой...он почему то заполняет оперативку и при выполнении программы выдает сообщение...не достаточно памяти...открываю диспечером задач...память 100 %...может подскажете в чем тут может быть проблема...
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var

  find,Copys:String; //Переменная типа объект TStringList.
  i:Integer; // Счётчик
 begin
    find:='п/дела';
    repeat
      begin
         memo1.Lines.BeginUpdate;
      try
    if pos(find,Memo1.Lines.Text)<>0 then
       begin
         DataModule2.ADOTable1.Insert;

         memo1.SetFocus();
         memo1.SelStart:=pos(find,Memo1.Lines.text)+7;
         memo1.SelLength:=Length(find);

         DBEdit1.Text:=copy(Memo1.Lines.Text,pos(find,Memo1.Lines.text)+7,Length(find));
         DBEdit2.Text:=MaskEdit1.Text;
         DBEdit3.Text:=MaskEdit2.Text;
         DBEdit4.Text:=MaskEdit3.Text;
         //memo1.SetFocus();
         memo1.SelStart:=pos(find,Memo1.Lines.text)-230;
         memo1.SelLength:=Length(find)+1295;
         Copys:=copy(Memo1.Lines.Text,pos(find,Memo1.Lines.text)-230,Length(find)+1295);
         Memo1.ClearSelection;
         DBMemo1.Lines.Add(Copys);
         If DataModule2.ADOTable1.Modified then
         DataModule2.ADOTable1.Post;
         DataModule2.ADOTable1.Refresh;
         Application.ProcessMessages;
        end;
     finally
     Memo1.Lines.EndUpdate;
   end;
 end;  until pos(find,Memo1.Lines.Text)<8;ShowMessage('Конвертирование закончено!!! ');
 end;
Poltev86 вне форума Ответить с цитированием
Старый 16.05.2010, 15:11   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Ошибки нет на самом деле то)))) просто надо сделать как...вообщем 16 строк перегнать в 16 столбцов!!! а здесь получаеться что он копирует каждуй строку текстового файла в строку бд..
в таблице, с которой связан ADOTable есть 16 (или более) столбцов?
Число строчек в текстовом файле кратно 16-ти?

или да, тогда так примерно:
Код:
 DataModule2.ADOTable1.Active:=true;
 k:=0;
 while (k+15) <= (f.Count - 1) do begin
     DataModule2.ADOTable1.Insert;
     for I := 0 to 15  do
         DataModule2.ADOTable1.Fields[i]:=f.Strings[k+i];
     DataModule2.ADOTable1.Post;
     k:= k+16; 
end;
DataModule2.ADOTable1.Active:=false;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2010, 23:18   #6
Poltev86
Пользователь
 
Аватар для Poltev86
 
Регистрация: 15.05.2010
Сообщений: 31
Радость

Огромное спасибо за помощь!!!
Poltev86 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка из текстового файла JeyKip Общие вопросы C/C++ 0 12.05.2010 17:00
Замена текстового файла Artishok Общие вопросы Delphi 27 26.10.2009 14:47
Кодирование текстового файла milate Паскаль, Turbo Pascal, PascalABC.NET 2 24.03.2009 13:00
Шифрование текстового файла pomoshnic Паскаль, Turbo Pascal, PascalABC.NET 5 14.02.2009 18:21
Мониторинг текстового файла zander Microsoft Office Excel 20 14.02.2009 01:34