Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать данные в переменную типа TABLE? SQL-запрос с параметрами 
:(
    Опции темы
direk2006
Дата 6.4.2015, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 9.11.2011

Репутация: нет
Всего: нет



Использую RAD XE3, MS SQL2012, ADO.

Создается динамический sql-запрос с параметрами.
Нужно в локальную переменную типа Table для дальшего использования передать 
список. Сам список хранится в EditListBox .

Если сразу писать, тогда все ОК :

Код

USE emty_base;

declare @T_ganr table ( name nvarchar(30) );
 
INSERT @T_ganr([name]) VALUES
 ('Война и мир'),('Капитанская дочка');


Я думаю, что нужно делать как-то так:

 
Код

EditListBox->Items->Add("Война и мир");
 EditListBox->Items->Add("Капитанская дочка");

String name_all = "('";
for (i = 0; i < EditListBox->Count; i++)
    {
      name_all = EditListBox->Items->Strings[i] + "'),('";
    }
name_all  = name_all  + "');";

DataModule1->ADOQuery2->Parameters->ParamByName("name_all ")->DataType  = ftString;
DataModule1->ADOQuery2->Parameters->ParamByName("name_all ")->Direction = pdInput;
DataModule1->ADOQuery2->Parameters->ParamByName("name_all ")->Value = name_all ;


А вот как дальше??? 
Подскажите пожалуйста. Ведь должен быть выход.

Спасибо.

Это сообщение отредактировал(а) direk2006 - 6.4.2015, 16:17
PM MAIL   Вверх
ТоляМБА
Дата 6.4.2015, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



Выполнение запроса на изменение данных:
или
DataModule1->ADOQuery2->Execute;
или
DataModule1->ADOQuery2->ExecSQL;

а чему у тебя равен
DataModule1->ADOQuery2->SQL->Text; ?
PM   Вверх
direk2006
Дата 6.4.2015, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 9.11.2011

Репутация: нет
Всего: нет



Цитата(ТоляМБА @ 6.4.2015,  18:03)
Выполнение запроса на изменение данных:
или
DataModule1->ADOQuery2->Execute;
или
DataModule1->ADOQuery2->ExecSQL;

а чему у тебя равен
DataModule1->ADOQuery2->SQL->Text; ?

Сам запрос работает. Текст sql сохраняется в отдельном файле, что бы легче было редактировать.

Код

  DataModule1->ADOQuery2->SQL->Clear();
  DataModule1->ADOQuery2->Parameters->Clear();
  DataModule1->ADOQuery2->SQL->LoadFromFile(ExtractFilePath(Application->ExeName)+ "\\sqlquery\\forinsert.qey") ;

DataModule1->ADOQuery2->Parameters->ParamByName("name_mpaa")->DataType  = ftString;
 DataModule1->ADOQuery2->Parameters->ParamByName("name_mpaa")->Direction = pdInput;
 if (RzComboBox2->Text.IsEmpty() == false)
    DataModule1->ADOQuery2->Parameters->ParamByName("name_mpaa")->Value = RzComboBox2->Text ;
 else
DataModule1->ADOQuery2->Parameters->ParamByName("name_mpaa")->Value = "NULL";

  DataModule1->ADOQuery2->Parameters->ParamByName("name_typ")->DataType  = ftString;
 DataModule1->ADOQuery2->Parameters->ParamByName("name_typ")->Direction = pdInput;
 DataModule1->ADOQuery2->Parameters->ParamByName("name_typ")->Value = RzComboBox1->Text ;

 DataModule1->ADOQuery2->Parameters->ParamByName("nazva")->DataType = ftString;
 DataModule1->ADOQuery2->Parameters->ParamByName("nazva")->Direction = pdInput;
 DataModule1->ADOQuery2->Parameters->ParamByName("nazva")->Value = RzEdit1->Text ;

 DataModule1->ADOQuery2->Parameters->ParamByName("nazva_original")->DataType = ftString;
 DataModule1->ADOQuery2->Parameters->ParamByName("nazva_original")->Direction = pdInput;
 DataModule1->ADOQuery2->Parameters->ParamByName("nazva_original")->Value = RzEdit2->Text ;

 DataModule1->ADOQuery2->Prepared = true;
        try
        {
          DataModule1->ADOQuery2->ExecSQL();    
        }
        catch (EADOError& e)
        {
           MessageDlg("Не вдалося записати дані в базу!!!", mtError, TMsgDlgButtons() << mbOK, 0);
           return;
        }


Вот сам файл forinsert.qey :

Код

USE emty_base;    

DECLARE @ID_MPAA_ INT                           
DECLARE @NAME_MPAA_ nvarchar(50)                          
DECLARE @NAME_TYP_ nvarchar(30)

SET @NAME_MPAA_ = :name_mpaa 
SET @NAME_TYP_ = :name_typ     

SELECT @ID_MPAA_ = id_mpaa FROM reference_mpaa WHERE name_mpaa = @NAME_MPAA_

DECLARE @NAZVA_ nvarchar(70)                       
DECLARE @NAZVA_ORIGINAL_ nvarchar(70) 
SET @NAZVA_ = :nazva                        
SET @NAZVA_ORIGINAL_ = :nazva_original

INSERT film (nazva, nazva_original,  id_mpaa)
VALUES (@NAZVA_, @NAZVA_ORIGINAL_,  @ID_MPAA_ )


Проблема в том, что все это конкретные переменные моей программы и передаются в конкретные локальные переменные SQL-запроса. А мне кроме того нужно передавать  списки значений, количество которых зарание неизвестно.  
Для етого я и думал использовать тип Table, закинуть туда список значений и потом уже его обробатывать.  Вот только как перенести даные с того же EditListBox в мою таблицу ума не преложу???

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.1068 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.