if (DBGrid1->SelectedRows->Count > 0) //если есть выделенные строки
{
AnsiString s = "";
TDataSet *pDS = DBGrid1->DataSource->DataSet;
for (int i=0; i < DBGrid1->SelectedRows->Count; i++)
{
pDS->GotoBookmark((void *)DBGrid1->SelectedRows->Items.c_str()); //Переходим к выделенной строке
for (int j = 0; j < pDS->FieldCount; j++)
{
if (j>0)
s = s+", ";
s = s + pDS->Fields->Fields[j]->AsString; //Заполняем значения полей в строку
}
ListBox1->Items->Add(s); //Добавляем в ListBox
s = "";
}
}
Копирование строк из Грида в таблицу БД построчно
У кого-нибудь есть готовый код передачи данных из выделенных строк таблицы Грид в таблицу Table1 БД SQL, доступ через ADO. И с эти вопросом запарилась. В какие-то дебри углубилась. Буду очень благодарна.:)
С помощью форума удалось написать такой код:
Цитата:
void __fastcall TForm1::Button8Click(TObject *Sender)
{
String TableName = "Load_Bookmark"; //Запрос, куда копируются строки из Грида
String newSqlTable ="CREATE TABLE dbo."+TableName+" (CardID int PRIMARY KEY CLUSTERED IDENTITY(1, 1) NOT NULL, KodSyst int,";
String newSqlTable1 = "GostID char (14), Project_Def char (10), NameRD char (250), Gruppa char (10), Nomer char (6),";
String newSqlTable2 = "Sapis int, Massa real, PlechoX real, PlechoY real, PlechoZ real,";
String newSqlTable3 = "Department char (3), DataSapoln datetime, Prim char (400), Slujebn ntext,";
String newSqlTable4 = "dmhP real, Prozent real, Developer char (20), Mx_R float, My_R float, Mz_R float, ImageArh int)";
ModuleLoad->ADOBookmark->SQL->Clear();
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable);
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable1);
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable2);
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable3);
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable4);
ModuleLoad->ADOBookmark->ExecSQL();
ModuleLoad->ADOBookmark->Close();
if (DBGridEh2->SelectedRows->Count > 0)
{
AnsiString Misc="",s = "";
TDataSet *pDS = DBGridEh2->DataSource->DataSet;
for (int i=0; i < DBGridEh2->SelectedRows->Count; i++)
{
pDS->GotoBookmark((void *)DBGridEh2->SelectedRows->Items.c_str());
for(int j=0;j<pDS->FieldCount;j++)
{TField* Fl=pDS->Fields->Fields[j];
if (!j)
{
Misc=Misc+","+Fl->FieldName;
s =s+"','"+Fl->AsString;
}
else
{
Misc="insert into dbo.Load_Bookmark ("+Fl->FieldName;
s ="values ('"+Fl->AsString;
}
}
Misc=Misc+")";
s=s+"')";
ModuleLoad->ADOBookmark->SQL->Clear();
ModuleLoad->ADOBookmark->SQL->Add(Misc);
ModuleLoad->ADOBookmark->SQL->Add(s);
ModuleLoad->ADOBookmark->ExecSQL();
}
}
}
{
String TableName = "Load_Bookmark"; //Запрос, куда копируются строки из Грида
String newSqlTable ="CREATE TABLE dbo."+TableName+" (CardID int PRIMARY KEY CLUSTERED IDENTITY(1, 1) NOT NULL, KodSyst int,";
String newSqlTable1 = "GostID char (14), Project_Def char (10), NameRD char (250), Gruppa char (10), Nomer char (6),";
String newSqlTable2 = "Sapis int, Massa real, PlechoX real, PlechoY real, PlechoZ real,";
String newSqlTable3 = "Department char (3), DataSapoln datetime, Prim char (400), Slujebn ntext,";
String newSqlTable4 = "dmhP real, Prozent real, Developer char (20), Mx_R float, My_R float, Mz_R float, ImageArh int)";
ModuleLoad->ADOBookmark->SQL->Clear();
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable);
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable1);
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable2);
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable3);
ModuleLoad->ADOBookmark->SQL->Add(newSqlTable4);
ModuleLoad->ADOBookmark->ExecSQL();
ModuleLoad->ADOBookmark->Close();
if (DBGridEh2->SelectedRows->Count > 0)
{
AnsiString Misc="",s = "";
TDataSet *pDS = DBGridEh2->DataSource->DataSet;
for (int i=0; i < DBGridEh2->SelectedRows->Count; i++)
{
pDS->GotoBookmark((void *)DBGridEh2->SelectedRows->Items.c_str());
for(int j=0;j<pDS->FieldCount;j++)
{TField* Fl=pDS->Fields->Fields[j];
if (!j)
{
Misc=Misc+","+Fl->FieldName;
s =s+"','"+Fl->AsString;
}
else
{
Misc="insert into dbo.Load_Bookmark ("+Fl->FieldName;
s ="values ('"+Fl->AsString;
}
}
Misc=Misc+")";
s=s+"')";
ModuleLoad->ADOBookmark->SQL->Clear();
ModuleLoad->ADOBookmark->SQL->Add(Misc);
ModuleLoad->ADOBookmark->SQL->Add(s);
ModuleLoad->ADOBookmark->ExecSQL();
}
}
}
Копирование, прям-таки, странное. Все проходит без ошибок, но копируются построчно только первый и последний столбцы. Кто-нибудь может объяснить, что не верно в этом коде?
Цитата:
Originally posted by richel
У кого-нибудь есть готовый код передачи данных из выделенных строк таблицы Грид в таблицу Table1 БД SQL, доступ через ADO. И с эти вопросом запарилась. В какие-то дебри углубилась. Буду очень благодарна.:)
У кого-нибудь есть готовый код передачи данных из выделенных строк таблицы Грид в таблицу Table1 БД SQL, доступ через ADO. И с эти вопросом запарилась. В какие-то дебри углубилась. Буду очень благодарна.:)
Выделенрые строки нужно вибирать через TBookmark. И через SQL - запрос Isert добавлять в таблицу. Вот пример обработки выделенных строк.
Код:
Цитата:
Originally posted by rostyslav
Для отладки нужно бы перед
ModuleLoad->ADOBookmark->SQL->Add(Misc);
написать
ShowMessage(s);
ShowMessage(Misc);
но скорей всего if(!j) нужно поменять на if(j)
Кроме этого, если строковое поле может содержать апострофы, то его значение лучше добавлять через QuotedStr().
Для отладки нужно бы перед
ModuleLoad->ADOBookmark->SQL->Add(Misc);
написать
ShowMessage(s);
ShowMessage(Misc);
но скорей всего if(!j) нужно поменять на if(j)
Кроме этого, если строковое поле может содержать апострофы, то его значение лучше добавлять через QuotedStr().
Да, условие было неправильным. Да и код пришлось подправить.
Спасибо за помощь!:)