Как вытащить в переменную
Запрос такой:
cmtkn->ParamCheck = true;
cmtkn->Prepared = false;
cmtkn->CommandText = AnsiString("") +"\
Insert Into Table1 (old_id, KodSyst, GostID) \n\
Select CardID, KodSyst, GostID \n\
From Table2 \n\
Where CardID in (" + sql_tkn + ") \n\
";
cmtkn->Execute();
У Table1 (куда вставляем) первое поле CardID int //PRIMARY KEY CLUSTERED IDENTITY(1, 1) NOT NULL, вот значения вставленных записей мне и нужно перечислить.
sql_tkn - это номера уникального номера вставляемых записей (с помощью закладок).
Посоветуйте, пожалуйста, что сделать. У меня перечисляется один и тот же номер по числу вставленных строк.
sql_tkn - это номера уникального номера вставляемых записей (с помощью закладок).
???????
Посоветуйте, пожалуйста, что сделать. У меня перечисляется один и тот же номер по числу вставленных строк.
Вызывать процедуру возвращающюю вставленные идентити.
TDataSet* gtkn = Grid_Volume->DataSource->DataSet;
gtkn->DisableControls();
// Алгоритм копирования
AnsiString SectorTable = "Loading_Card_Sector"; //Откуда копировать
AnsiString CardTable = "Loading_Card_21030"; //Куда копировать
AnsiString SectorBreak = "Loading_Break_Sector"; //Откуда копировать
AnsiString CardBreak = "Loading_Break_21030"; //Куда копировать
AnsiString str;
TADOQuery *qry = ADOQuery1; // нужно поместить компонент на форму и
// настроить
int crno = gtkn->RecNo;
try
{
for(SET::iterator it=bookmarks.begin();it!=bookmarks.end();it++)
{
gtkn->RecNo = *it;
int oldCardId = gtkn->FieldByName("CardID")->AsInteger;
str = Format("INSERT INTO %s (KodSyst, GostID, NameRD) \n\
Select KodSyst, GostID, NameRD \n\
From %s Where CardID=%d",
ARRAYOFCONST((CardTable, SectorTable, oldCardId)));
qry->SQL->Text = str;
qry->ExecSQL(); // Добавляем одну родительскую запись
qry->SQL->Text = "SELECT SCOPE_IDENTITY()";
qry->Open();
int newCardId = qry->Fields->Fields[0]->AsInteger;
str = Format("INSERT INTO %s (CardID, Sp20i19) \n\
SELECT %d, Sp20i19 \n\
FROM %s \n\
WHERE CardID = %d",
ARRAYOFCONST((CardBreak, newCardId, SectorBreak, oldCardId)));
qry->SQL->Text = str;
qry->ExecSQL(); // добавление дочерных записей
}
}
__finally
{
gtkn->RecNo = crno;
gtkn->EnableControls();
}
Но этот код очень интересен. Спасибо. Мне в нем все ясно.:)
и здесь выдается сообщение:
Почему оно не найдено? В самом компоненте я вытащила все названия полей. Сам по себе запрос SQL работает. Может как-то по особенному нужно настроить ADOQuery1?
Я бы хотела этот пример довести до конца. Он мне кажется более интересным, чем мой код. Здесь нет никаких временных полей.
Почему оно не найдено? В самом компоненте я вытащила все названия полей. Сам по себе запрос SQL работает. Может как-то по особенному нужно настроить ADOQuery1?
Думаю что не нужно было вытягивать названия полей. Там же 3 разных запроса с разными полями. И наличие полей проверяется только при втором запросе при qry->Open();
Думаю что не нужно было вытягивать названия полей. Там же 3 разных запроса с разными полями. И наличие полей проверяется только при втором запросе при qry->Open();
Простите, я оказалась невнимательна. В предыдущей моей задаче приходилось пользоваться такой записью:
Там обязательно должны выть вытащены поля в компоненте.
Конечно, все работает. Спасибо огромное. Мне это решение больше нравится.:}