TQuery
Вот какой вопрос:
for(unsigned int i = 0; i < RecCount; i++)
{
f_dm->q->Close();
f_dm->q->SQL->Clear();
f_dm->q->SQL->Add("Тут сам запрос");
f_dm->q->ExecSQL();
f_dm->q->Open();
}
Если RecCount > 300...все вываливается сообщение типа Too many open tables...и указывается та таблица, с которой я работаю, но без цикла мне никак не обойтись...что делать?
Заранее всем спасибо за ответ.
Здравствуйте Строители!!!
Вот какой вопрос:
for(unsigned int i = 0; i < RecCount; i++){
f_dm->q->Close();
f_dm->q->SQL->Clear();
f_dm->q->SQL->Add("Тут сам запрос");
f_dm->q->ExecSQL();
f_dm->q->Open();
}
Если RecCount > 300...все вываливается сообщение типа Too many open tables...и указывается та таблица, с которой я работаю, но без цикла мне никак не обойтись...что делать?
Заранее всем спасибо за ответ.
А зачем ты сначало закрываешь и потом открываешь??? Извращения и нагрузка на ресурсы... Делай так.
for(unsigned int i = 0; i < RecCount; i++){
f_dm->q->SQL->Add("Тут сам запрос");
f_dm->q->ExecSQL();
f_dm->q->SQL->Clear();
}
f_dm->q->Open();
А еще лучше так..
for(unsigned int i = 0; i < RecCount; i++){
f_dm->q->SQL->Text = "Тут сам запрос";
f_dm->q->ExecSQL();
}
f_dm->q->Open();
А зачем ты сначало закрываешь и потом открываешь??? Извращения и нагрузка на ресурсы... Делай так.
for(unsigned int i = 0; i < RecCount; i++){
f_dm->q->SQL->Add("Тут сам запрос");
f_dm->q->ExecSQL();
f_dm->q->SQL->Clear();
}
f_dm->q->Open();
А еще лучше так..
for(unsigned int i = 0; i < RecCount; i++){
f_dm->q->SQL->Text = "Тут сам запрос";
f_dm->q->ExecSQL();
}
f_dm->q->Open();
Так ничего не получится...т.к.
..м-м-м...в общем смотри...
for(unsigned int i = 0; i < RecCount; i++)
{
Здесь я формирую кое-какие данные для SQL-запроса(данные разные, все зависит от текущего шага цикла).
Затем очищаю SQL-запрос.
f_dm->q->SQL->Clear();
Затем я формирую SQL-зарпос, используя полученные данные.
f_dm->q->SQL->Text = "Тут сам запрос";
Все это тщательно перемешиваем и ставим в духовку:))
f_dm->q->ExecSQL();
...и вот настал момент и мы достаем то что у нас получилось
f_dm->q->Open();
Затем мне надо проверить сколько всего записей я получил в рез-те запроса
int count = f_dm->q->RecordCount;
Если я выполню f_dm->q->Open(); после скобок, то просто напросто доступ бедт закрыт к результатам запроса... и я не получу кол-во записей!!!
}
Так ничего не получится...т.к.
..м-м-м...в общем смотри...
for(unsigned int i = 0; i < RecCount; i++)
{
Здесь я формирую кое-какие данные для SQL-запроса(данные разные, все зависит от текущего шага цикла).
Затем очищаю SQL-запрос.
f_dm->q->SQL->Clear();
Затем я формирую SQL-зарпос, используя полученные данные.
f_dm->q->SQL->Text = "Тут сам запрос";
Все это тщательно перемешиваем и ставим в духовку:))
f_dm->q->ExecSQL();
...и вот настал момент и мы достаем то что у нас получилось
f_dm->q->Open();
Затем мне надо проверить сколько всего записей я получил в рез-те запроса
int count = f_dm->q->RecordCount;
Если я выполню f_dm->q->Open(); после скобок, то просто напросто доступ бедт закрыт к результатам запроса... и я не получу кол-во записей!!!
}
Если использовать Text, Clear не нужен.
Ругается потому что видимо не происходит закрытия таблицы и лучше всего это делать в КОНЦЕ цикла а не начале.
Далее зачем тебе знать сколько данных?? Зачем напрягать ресурсы? Когда можно просто самому вести подсчет, того сколько раз цикл выполнил код. И скорее всего ты не знаешь, про поле аутоинкримента. Другой причины значть кол-во записей я не вижу. Код пододробней в студию.
Если я выполню f_dm->q->Open(); после скобок, то просто напросто доступ бедт закрыт к результатам запроса... и я не получу кол-во записей!!!
}
А что за глупость вызывать ExecSQL() перед Open()?