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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2015, 17:25   #41
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
StrToFloatDef();
Цитата:
заполняются нулями(((
Цитата:
StringGrid1.Cells[l,j]:=StringReplace(StringGrid1.Cells[l,j], '.', ',', [rfReplaceAll]);
НЕ забываем про РАЗЛИЧНЫЕ стандарты DecimalSepator.

если в исходной таблице ',' присутствует исключительно в числах, то в самом первом разборе делаем "глобальную замену"
Код:
row[0].Text:=StringRepalce( ClipBoard.AsText, ',', DecimalSeparator, [dtreplaceall] );
И далее все как было!

если НЕ УВЕРЕНЫ что будет в исходном тексте и что НУЖНО нам (при работе на разных компах!) можно немного по другому
Код:
row[0].text:=Clipboard.Text;
row[0].text:=StringReplace(row[0].text, ',', DecimalSeparator, [rtreplaceall]);
row[0].text:=StringReplace(row[0].text, '.', DecimalSeparator, [rtreplaceall]);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 29.07.2015 в 17:39.
evg_m вне форума Ответить с цитированием
Старый 29.07.2015, 20:58   #42
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Не нравится мне ваши StringReplace память дует...

Код:
procedure TForm1.Button1Click(Sender: TObject);
const FieldNames:array[0..3] of string=('f','a','v','d');
var
  i,j:integer;
  lines:TStringList;
  row:array[0..3] of TStringList;
  Fields:array[0.3] of TField;
begin
  if not Clipboard.HasFormat(CF_TEXT) then exit;
  lines:=TStringList.Create();
  try
    lines.Text:=ClipBoard.AsText;
    if lines.Count<4 then exit;

    for i:=low(row) to high(row) do
      row[i]:=TStringList.Create;
    try
      for i:=low(row) to high(row) do
      begin
        row[i].Delimiter:=#9;
        row[i].DelimitedText:=lines[i];
      end;
      lines.Clear;
      for i:=low(Fields) to high(Fields) do
        Fields[i]:=Datamodule2.ADOQuery1.FieldByName(FieldNames[i]);
      for i:=0 to row[0].Count-1 do
      begin
        memo1.lines.add(row[0][i]+'|'+row[1][i]+'|'+row[2][i]+'|'+row[3][i]);
        Datamodule2.ADOQuery1.Append;
        for j:=low(Fields) to high(Fields) do
          Fields[j]:=StrToFloatDef(row[j][i],0);
        Datamodule2.ADOQuery1.Post;
      end;
    finally
      for i:=low(row) to high(row) do
        row[i].Free;
    end;
  finally
    lines.free;
  end;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 30.07.2015, 16:23   #43
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

по времени так же долго получается
Ernest027 вне форума Ответить с цитированием
Старый 30.07.2015, 17:34   #44
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
по времени так же долго получается
Цитата:
1) 6420 записей.
for i:=1 to 4 do begin
row[i].capacity:=6500; (>=ожидаемое число колонок)
row[i].Text:=stringReplace(row[0][i-1], #9,#13#10, [rfReplaceAll]);//или любой другой код загрузки полей!!!
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.07.2015 в 17:37.
evg_m вне форума Ответить с цитированием
Старый 30.07.2015, 17:52   #45
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Цитата:
Сообщение от Ernest027 Посмотреть сообщение
по времени так же долго получается
И правильно... зачем Query.Append для мульти вставки пользовать? Тыб еще в тейбл пихал
Для этого Execute есть, а лучше TADOCommand.Execute

Кроме того транзакцируй Где BeginTransaction EndTrans? раз с сотню строк коммитить транзакцию...

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
  lines:TStringList;
  row:array[0..3] of TStringList;
  Command:TADOCommand;
begin
  if not Clipboard.HasFormat(CF_TEXT) then exit;
  lines:=TStringList.Create();
  try
    lines.Text:=ClipBoard.AsText;
    if lines.Count<4 then exit;
    for i:=low(row) to high(row) do
      row[i]:=TStringList.Create;
    try
      for i:=low(row) to high(row) do
      begin
        row[i].Delimiter:=#9;
        row[i].DelimitedText:=lines[i];
      end;
      lines.Clear;
      Command:=TADOCommand.Create(nil);
      try
        Command.Connection:=ADOConnection;
        Command.CommandText:='INSERT INTO Table (f, a, v, d) VALUES :f, :a, :v, :d;';
        Command.Prepared:=true;
        Command.Connection.BeginTrans;
        try
          for i:=0 to row[0].Count-1 do
          begin
            for j:=0 to Command.Parameters.Count-1 do
              Command.Parameters[j].Value:=StrToFloatDef(row[j][i],0);
            Command.Execute;
          end;
          Command.Connection.CommitTrans;
        except
          Command.Connection.RollbackTrans;
          raise;
        end;
      finally
        Command.Free;
      end;
    finally
      for i:=low(row) to high(row) do
        row[i].Free;
    end;
  finally
    lines.free;
  end;
end;
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 30.07.2015 в 18:10.
Slym вне форума Ответить с цитированием
Старый 31.07.2015, 07:50   #46
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

'неправильный синтаксис около конструкции "@P1"'
Ernest027 вне форума Ответить с цитированием
Старый 31.07.2015, 08:31   #47
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Ну а подумать? SQL запрос не верный...

Код:
Command.CommandText:='INSERT INTO Table (f, a, v, d) VALUES (:f, :a, :v, :d);';
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 31.07.2015, 10:47   #48
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

не работает, вообще ничего не делает
Ernest027 вне форума Ответить с цитированием
Старый 31.07.2015, 18:42   #49
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Ну ты же догадался в запросе Table заменить на правильное значение...
Выложи уже проект...
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 31.07.2015 в 18:47.
Slym вне форума Ответить с цитированием
Старый 31.07.2015, 19:40   #50
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Поменял конечно
весь не войдет, это часть
Вложения
Тип файла: rar Вибрация.rar (59.2 Кб, 5 просмотров)
Ernest027 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADO, записи в таблицу User_IR_An БД в Delphi 4 09.04.2014 14:03
Нужно создать таблицу в access with ado hemn6vyr БД в Delphi 2 27.03.2013 22:56
как очистить всю таблицу в ado aleksandr1990 C++ Builder 1 10.11.2011 12:57
Не сохраняет данные в таблицу (ADO) alatir БД в Delphi 6 09.06.2010 02:39
Добавление записи в таблицу (ADO) Yura_S БД в Delphi 12 25.11.2009 19:11