mihentium |
Отправлено: 19.10.2005, 20:19 |
|
Не зарегистрирован
|
Я новичок, было
Q F
401 01
401 01
401 02
401 02
403 11
403 13
...... ....
надо
Q F
401 01
401 02
401 03
401 04
403 01
403 02
..... ....
Я делал так
[CODE]
int curcod=0,nextcod=0,i=0;
try
{
QProj->SQL->Clear();
QProj->SQL->Add("Select * from NTP_Proj order by codprog,f ");
for (QProj->Open(); !QProj->Eof ; QProj->Next())
{
if (curcod=0)
{
curcod=QProj->Fields->Fields[0]->AsInteger;
}
else
{
nextcod=QProj->Fields->Fields[0]->AsInteger;
if (nextcod=curcod)
{
i=i+1;
QProj->Fields->Fields[1]->AsInteger=i;
USQLProj->Apply(ukModify);
}
else
{
curcod=nextcod;
i=1;
QProj->Fields->Fields[1]->AsInteger=i;
}
}
}
}__finally
{
if (QProj->Active) QProj->Close();
}
только почему-то не работает,
не ругайтесь на мой глупый вопрос я новичок |
|
AVC |
Отправлено: 20.10.2005, 08:23 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
2mihentium. Не забывайте про тэги!
Примерно так.
CODE |
TQuery *qry = QProj;
if (qry->Active) qry->Active = false;
qry->SQL->Text = "Select * From..."; // обязательно из одной таблицы
// и QProj должен быть настроен так, что бы позволял редактировать
// и не забудьте о блокировках и транзакциях
TField *fldQ, *fldF;
try
{ qry->Active = true;
flqQ = qry->FieldByName("Q");
flqF = qry->FieldByName("F");
}
catch(Exception &xcp) { что то делаем с ошибкой; }
int oldQ = 0;
int curF = 0;
for (qry->First(); !qry->Eof; qry->Next())
{ if (fldQ->AsInteger != oldQ)
{ oldQ = fldQ->AsInteger; curF = 0;}
curF++;
qry->Edit(); fldF->AsInteger = curF; qry->Post();
}
qry->Active = false;
|
Код не проверялся (даже на синтаксис).
Еще посмотрите на тему "Всем, кто задает вопросы по БД". Для многих SQL серверов эту процедуру можно поручить самому серверу, что гораздо более эффективно.
Отредактировано AVC — 20/10/2005, 07:24 |
|
mihentium |
Отправлено: 20.10.2005, 21:07 |
|
Не зарегистрирован
|
Всё конечно хорошо, но есть одна проблема приведенный код выдаёт ошибку
Cannot modify a read-only dataset ,
при этом если поставить свойство CashedUpdates в true то ошибки нет, но при этом не работает метод ApplyUpdates.
(компонент UpdateSQL я использую)
Plz help |
|
RVN |
Отправлено: 21.10.2005, 07:18 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
Свойство запроса поставь RequestLive=true |
|
AVC |
Отправлено: 21.10.2005, 07:57 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE (mihentium @ 20/10/2005, 20:07) | Всё конечно хорошо, но есть одна проблема приведенный код выдаёт ошибку
Cannot modify a read-only dataset
|
Это не код выдает ошибку а настройка ваших компонентов выдает ошибку . Я же специально подчеркнул в примере
// и QProj должен быть настроен так, что бы позволял редактировать
см. RVN |
|
mihentium |
Отправлено: 21.10.2005, 17:50 |
|
Не зарегистрирован
|
Всем спасибо . Проблема была в Group by в Select, когда убрал всё заработало, но у меня возник следующий вопрос что делать если данные по столбцу Q не упорядочены по возрастанию? Если менять код просто скажите и не парьтесь. |
|
AVC |
Отправлено: 24.10.2005, 08:43 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE (mihentium @ 21/10/2005, 16:50) | у меня возник следующий вопрос что делать если данные по столбцу Q не упорядочены по возрастанию? |
Упорядочить. На строне сервера (это просто) или на клиенте (это сложнее). Этот алгоритм предпологает упорядоченность по полю Q.
Замена OldQ на массив OldQ[] позволит работать с неупорядоченным массивом (это практически эквивалентно упорядочиванию на кленте)
|
|