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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2015, 20:21   #51
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Мой тестовый проект... что я не так делаю?
все добавляется... экселька там же в архиве...
Вложения
Тип файла: rar Вибрация.rar (17.7 Кб, 8 просмотров)
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 31.07.2015, 20:56   #52
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

может у меня выводятся нули изза того что delphi не понимает точку в нецелых числах? в исходной таблице числа формата 0.000, 0.502. Может нужна запятая?
Ernest027 вне форума Ответить с цитированием
Старый 31.07.2015, 21:48   #53
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Мой тестовый проект... что я не так делаю?
ЗАБЫВАЕШЬ о разных форматах представления(записи) ВЕЩЕСТВЕННЫХ чисел
и при тестировании ВЕЩЕСТВЕННЫХ не задаешь дробную часть.

Цитата:
может у меня выводятся нули изза того что delphi не понимает точку в нецелых числах? в исходной таблице числа формата 0.000, 0.502. Может нужна запятая
может

Код:
            for j:=0 to Command.Parameters.Count-1 do begin
  s::=row[j][i];
  s:=stringreplace(s, '.', DecimalSeparator, []);
                Command.Parameters[j].Value:=StrToFloatDef(s,0);
   end;
!! для НЕ любителей StringReplace
//for k:=1 to length(s) do if s[k]='.' then s[k]:=decimalSeparator;

Еще можно было бы использовать StrtoFloat с явным указанием формата (что использовать в качестве разделителя дробной части) но под рукой к сожалению нет примера.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 01.08.2015, 07:14   #54
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

о скорости не отписался....
кстати DecimalSeparator можно определять статистически прогнав поиск по тексту с подсчетом точек и запятых... чего больше то и сепаратор

Код:
function DetectDecimalSeparator(const Text:string):char;
var i:integer;
  comma,dot:integer;
begin
  comma:=0;
  dot:=0;
  for i:=1 to length(Text) do
  begin
    if Text[i]=',' then inc(comma) else
      if Text[i]='.' then inc(dot);
  end;
  if comma>dot then
    result:=',' else
    if comma<dot then
       result:='.' else
         result:=DecimalSeparator;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
  lines:TStringList;
  row:array[0..3] of TStringList;
  Command:TADOCommand;
  OldDecimalSeparator:Char;
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;
      OldDecimalSeparator:=DecimalSeparator;
      DecimalSeparator:=DetectDecimalSeparator(lines.Text);
      lines.Clear;
      try
        Command:=TADOCommand.Create(nil);
        try
          Command.Connection:=ADOConnection1;
          Command.CommandText:='DELETE * FROM Vibration';
          Command.Execute;

          Command.CommandText:='INSERT INTO Vibration (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
        DecimalSeparator:=OldDecimalSeparator;
      end;
    finally
      for i:=low(row) to high(row) do
        row[i].Free;
    end;
  finally
    lines.free;
  end;
  ADOTable1.Requery();
end;
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 01.08.2015 в 07:25.
Slym вне форума Ответить с цитированием
Старый 01.08.2015, 12:36   #55
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Ругается на decimalseparator
Ernest027 вне форума Ответить с цитированием
Старый 01.08.2015, 12:50   #56
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В современных Делфи нужно писать FormatSettings.DecimalSeparator.
А современным школоло пора запомнить: Текст ошибки должен быть ОБЯЗАТЕЛЬНО опубликован, дабы не произошло концентрации телепатов в одном месте
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.08.2015, 14:50   #57
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Slym, Вот проект Ваш,там экселевский файл, в котором пример таблицы которую нужно в БД засунуть. Как сделать?
Вложения
Тип файла: rar 1.rar (53.8 Кб, 6 просмотров)

Последний раз редактировалось Ernest027; 01.08.2015 в 15:15.
Ernest027 вне форума Ответить с цитированием
Старый 02.08.2015, 08:01   #58
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Даже скопипастить толком не можешь? где изменение DecimalSeparator?
У меня под Delphi7 все работает. рабочий пример и твой файл прилагаю

не забываем
Цитата:
Сообщение от Stilet Посмотреть сообщение
В современных Делфи нужно писать FormatSettings.DecimalSeparator.
А современным школоло пора запомнить: Текст ошибки должен быть ОБЯЗАТЕЛЬНО опубликован, дабы не произошло концентрации телепатов в одном месте
Вложения
Тип файла: rar 1.rar (35.7 Кб, 10 просмотров)
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 02.08.2015 в 08:12.
Slym вне форума Ответить с цитированием
Старый 02.08.2015, 12:42   #59
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Не пойму куда писать FormatSettings.DecimalSeparator.

Разобрался

Последний раз редактировалось Аватар; 02.08.2015 в 13:02.
Ernest027 вне форума Ответить с цитированием
Старый 05.08.2015, 09:44   #60
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

единственная проблема: значения в столбцах a,v,d съезжают относительно столбца f на 2 строки вниз, как это исправить?
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