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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2016, 10:56   #1
royun
Пользователь
 
Регистрация: 20.05.2011
Сообщений: 67
По умолчанию Insert данных в БД используя ADOQuery

Есть StringGrid2 данные которого надо отправить на необходимую таблицу в БД. Необходимую таблицу выбираю с помощью ComboBox. Таблица состоит из двух колонок data тип datetime и fio тип varchar(15).
Возникает проблема в выделенной области - не соответствие типов.

Код:
for iRow := StringGrid2.FixedRows to StringGrid2.RowCount - 1 do
  begin
      if StringGrid2.Cells[1,iRow] <> '' then
      begin
      RecCount:=RecCount + 1;
        with ADOQuery1 do
        begin
        Close;
        SQL.Clear;
        SQL.Add('insert into ['+ComboBox1.Text+'] (data, fio)');
        SQL.Add('values('+StrToDateTime(StringGrid2.Cells[1, iRow]+','+StringGrid2.Cells[2, iRow]);
        ExecSQL;
        end;
      end;
  end;

Последний раз редактировалось royun; 30.03.2016 в 11:02. Причина: Пояснение
royun вне форума Ответить с цитированием
Старый 30.03.2016, 11:05   #2
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

Код:
,'+StringGrid2.Cells[2, iRow]);
Видимо ковычки нужны для varchar(15)
netpolice вне форума Ответить с цитированием
Старый 30.03.2016, 11:09   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
// SQL.Text:=format('insert into [%s] (data, fio) values(:dt, :fio)', [ComboBox1.Text]);
SQL.Text:='insert into ['  + ComboBox1.Text +'] (data, fio) values(:dt, :fio)';
SQL.ParamByName('dt').Value:=StrToDateTime(StringGrid2.Cells[1, iRow]);
SQL.ParemByName('fio').Value:=StringGrid2.Cells[2, iRow];
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 30.03.2016, 11:24   #4
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от netpolice Посмотреть сообщение
Код:
,'+StringGrid2.Cells[2, iRow]);
Видимо кавычки нужны для varchar(15)
так то верно, но вангую ошибка возникала не соответствия типов

Код:
     SQL.Add('values('+StrToDateTime(StringGrid2.Cells[1,iRow]
видимо нефиг пытаться сложить дату и строку.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 30.03.2016, 11:44   #5
royun
Пользователь
 
Регистрация: 20.05.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
// SQL.Text:=format('insert into [%s] (data, fio) values(:dt, :fio)', [ComboBox1.Text]);
SQL.Text:='insert into ['  + ComboBox1.Text +'] (data, fio) values(:dt, :fio)';
SQL.ParamByName('dt').Value:=StrToDateTime(StringGrid2.Cells[1, iRow]);
SQL.ParemByName('fio').Value:=StringGrid2.Cells[2, iRow];
evg_m, выходит ошибка,что не найден параметр dt.
royun вне форума Ответить с цитированием
Старый 30.03.2016, 11:57   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от royun Посмотреть сообщение
evg_m, выходит ошибка,что не найден параметр dt.
покажите ваш код после исправлений.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2016, 12:00   #7
royun
Пользователь
 
Регистрация: 20.05.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
покажите ваш код после исправлений.
Код:

SQL.Add('insert into ['  + ComboBox1.Text +'] (data, fio) values(:dt, :fio)');
Parameters.ParamByName('dt').Value:=StrToDateTime(StringGrid2.Cells[1, iRow]);
Parameters.ParamByName('fio').Value:=StringGrid2.Cells[2, iRow];
royun вне форума Ответить с цитированием
Старый 30.03.2016, 12:17   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А SQL очищен от предыдущего использования? Предлагалось же SQL.Text:=
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.03.2016, 12:20   #9
royun
Пользователь
 
Регистрация: 20.05.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А SQL очищен от предыдущего использования? Предлагалось же SQL.Text:=
Да

Код:
SQL.Clear;
royun вне форума Ответить с цитированием
Старый 30.03.2016, 12:24   #10
royun
Пользователь
 
Регистрация: 20.05.2011
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А SQL очищен от предыдущего использования? Предлагалось же SQL.Text:=
Попробовал

Код:
SQL.Clear;
SQL.Text:='insert into ['  + ComboBox1.Text +'] (data, fio) values(:dt, :fio)';
Parameters.ParamByName('dt').Value:=StrToDateTime(StringGrid2.Cells[1, iRow]);
Parameters.ParamByName('fio').Value:=StringGrid2.Cells[2, iRow];
Выходит та же ошибка.
royun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка ADOQuery:DATAset not in edit or insert mode Novichok95 БД в Delphi 4 05.11.2012 18:00
Чтение данных из ADOQuery rainbow БД в Delphi 1 25.08.2011 10:53
Виснет AdoQuery при INSERT sergey_dmitrievich C/C++ Базы данных 0 01.08.2011 13:17
Сохранить из RichEdit текст и форматирование запросом для ADOQuery через INSERT INTO silent_lab БД в Delphi 0 15.07.2011 16:58
База Данных MySql не выполняется INSERT INTO vasylshvv Java Базы данных (JDBC, JPA, Hibernate) 6 04.08.2009 10:16