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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2015, 16:30   #21
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
да какой ему еще то параметр нужен?
Ты внимательно прочитал что тебе evg_m написал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.09.2015, 16:39   #22
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  sIn:string;
  k:Double;
begin
if StringGrid1.Cells[1,1]<>'' then
begin
sIn := '';
with StringGrid1 do
for i:=0 to RowCount-1 do
begin
     if TryStrToFloat(Cells[1,i],k) then
    begin
       if sIn<>'' then sIn:=sIn+',';
       sIn := sIn + Cells[1,i];
    end;
end;
with DataModule2.ADOQuery8 do
begin
SQL.Clear;
SQL.Add('insert into VibrationCircle (PointID,f,a,v,d) select '+QuotedStr(DataModule2.ADOQuery2.FieldByName('PointID').AsString)
+',f,a1,v1,d1 from Vibration2 where f in ('+quotedstr(sIn)+')');
ExecSQL;
SQL.Add('select * from VibrationCircle where PointID='+QuotedStr(DataModule2.ADOQuery2.FieldByName('PointID').AsString)
+' order by f');
Open;
end;
end;

end;
ошибка при преобразовании типа данных varchar к numeric.
Цитата:
Ты внимательно прочитал что тебе evg_m написал?
да.
Цитата:
тогда смотри что в ПЕРЕМЕННОЙ sIn
пока только целые числа

Последний раз редактировалось Stilet; 10.09.2015 в 16:43.
Ernest027 вне форума Ответить с цитированием
Старый 10.09.2015, 16:52   #23
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

как то так по несколько раз вставляет. а десятичные вообще пропускает. тип поля decimal(18,4)
Изображения
Тип файла: jpg Целые числа.jpg (39.6 Кб, 135 просмотров)
Тип файла: jpg Нецелые числа.jpg (38.8 Кб, 133 просмотров)
Ernest027 вне форума Ответить с цитированием
Старый 10.09.2015, 17:12   #24
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
по несколько раз вставляет.
MS SQL он такой, может и несколько запросов в одной команде проглотить.
Код:
SQL.Clear;
SQL.Add('insert ...);
ExecSQL; //ДОБАВИЛИ что считали нужным
SQL.Add('select ...);
SQL.Open; //НО!!!
insert из команды НИКУДА не делся (ccылки на посты где об этом УЖЕ говорилось дать?)
посему ДОБАВЛЯЕМ еще раз. и только потом читаем что получили!

P.S. Пиши ты все SQL запросы в отдельных ADO-шках и не узнал бы о таких фишках!

Цитата:
',f,a1,v1,d1 from Vibration2 where f in ('+quotedstr(sIn)+')');
ОДИН из случаев когда КАВЫЧКИ будут ЛИШНИМИ!!!
Цитата:
ошибка при преобразовании типа данных varchar к numeric.
ну не может быть такого числа '1,2,3,4,5'.
все что взято в кавычки по мнению сервера это есть (должно быть) одно значение поля (то бишь одно число).
в кавычки (в случае in) либо каждое число по отдельности, либо ничего.
Код:
in (1,2,3,4,5)
in ('1','2','3','4','5')
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 10.09.2015 в 17:56.
evg_m вне форума Ответить с цитированием
Старый 11.09.2015, 15:20   #25
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
begin
if StringGrid1.Cells[1,1]<>'' then
begin
for i := 0 to 7 do
begin
with DataModule2.ADOQuery1 do
begin
  sql.Clear;
  SQL.Add('select * from Vibration2 where f='+quotedstr(StringGrid1.Cells[1,i]));
  Open;
end;
with DataModule2.ADOQuery8 do
begin
Append;
FieldByName('f').AsFloat:=DataModule2.ADOQuery1.FieldByName('f').AsFloat;
FieldByName('a').AsFloat:=DataModule2.ADOQuery1.FieldByName('a1').AsFloat;
FieldByName('v').AsFloat:=DataModule2.ADOQuery1.FieldByName('v1').AsFloat;
FieldByName('d').AsFloat:=DataModule2.ADOQuery1.FieldByName('d1').AsFloat;
post;
end;
DataModule2.ADOQuery1.Requery();
end;
end;
DataModule2.ADOQuery8.SQL.Clear;
DataModule2.ADOQuery8.SQL.Add('select * from VibrationCircle where PointID='+QuotedStr(DataModule2.ADOQuery2.FieldByName('PointID').AsString)+' order by f');
DataModule2.ADOQuery8.Open;
DataModule2.ADOQuery1.Requery();
end;
вот так работает,но почему то только с целыми числами. Если в stringgrid появляются числа с запятой то пишет:
Цитата:
ошибка при преобразовании типа данных varchar к numeric.
Ernest027 вне форума Ответить с цитированием
Старый 11.09.2015, 15:38   #26
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
SQL.Add('select * from Vibration2 where f='+quotedstr(StringGrid1.Cells[1,i]));
Цитата:
вот так работает,но почему то только с целыми числами. Если в stringgrid появляются числа с запятой то пишет:
Цитата:
я честно не знаю как поведет себя сервер если у него выставлена в качестве десятичной точки (на самом деле запятая!!!).
Не зря постоянно твердят работай с(через) параметрами.

Код:
SQL.Add('select * from Vibration2 where f=:fx');
и далее
1) либо напрямую
Код:
SQL.Paramters.ParameterByName('fx').value:=StringGrid1.Cells[1,i];
если будет нормальное число то Variant такое должен переварить, но как он поведет себя в НЕНОРМАЛЬНОМ случае не знаю.

2) либо "сам" надежно проверяй правильность числа
Код:
SQL.Parameters.ParameterByName('fx').value:=StrtoFloat(StringGrid1.Cells[1,i]);
Я лично за второй вариант.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 11.09.2015 в 15:41.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование с одного листа на другой Dramen Microsoft Office Excel 1 06.09.2015 21:09
Копирование необходимого количества строк с одного листа на другой! mnemonix Microsoft Office Excel 3 13.09.2013 13:26
Копирование строк из одного файла в другой с соблюдением условия allichka Microsoft Office Excel 6 19.05.2011 16:25
Копирование к строк из одного файла в другой A_Orlov Помощь студентам 1 15.06.2010 14:49
Сортировка в StringGrid'е, копирование строк из одного SG в другой monushka Помощь студентам 3 29.10.2007 23:54