Я использую операции массива DML для ускорения ввода большого количества записей в базу данных SQL. Принцип описан here. Пример кода, как используется эта функциональность:Освободить память для операций с массивом DML
TFDQuery *FDQuery1;
...
FDQuery1->SQL->Text = "insert into MyTab values (:p1, :p2, :p3)";
// here FDQuery1->Params collection is filled by 3 parameters
const int array_size = 100;
FDQuery1->Params->ArraySize = array_size;
FDQuery->Prepared = true;
for(int i = 0; i < array_size; i++)
{
FDQuery1->Params[0]->AsIntegers[i] = i;
FDQuery1->Params[1]->AsStrings[i] = "qwe";
FDQuery1->Params[2]->Clear(i);
}
FDQuery1->Execute(array_size);
По сути, это означает, что вместо вызова функции клиента ядро базы данных для каждой строки, вставленной, я сначала подготовить данные мне нужно вставить в массив. Типичный размер массива - 1000 единиц. Затем я вызываю функцию клиента с параметром array. К сожалению, нигде в документации не описано, когда выпущена память для массива параметров. Это делается, когда я не готов к поиску запроса?
TFDQuery *query;
...
query->Prepared = false;
Или это делается, когда я закрываю запрос?
query->Close();
Или это делается, когда я установил размер массива в 1?
query->Params->ArraySize = 1
можете ли вы показать код, как вы пишете параметры массива? –
Это не относится непосредственно к вашему q, но какой тип сервера Sql вы используете? – MartynA
Я использую Firebird 2.5.4. – truthseeker