telepath |
Отправлено: 07.02.2005, 16:57 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Как правильно удалять записи с помощью FIB Plus?
Пытаюсь вот так, но полагаю это неправильно:
tRec это датасет, tTrasact это транзакция
CODE | tTransact->StartTransaction();
org_year_typ_per* oytp = (org_year_typ_per *)tnode->Data;
tRec->Close();
tRec->SQLs->SelectSQL->Clear();
tRec->SQLs->SelectSQL->Add("DELETE FROM REC WHERE");
tRec->SQLs->SelectSQL->Add("ORG_ID=" + IntToStr(oytp->id_org));
tRec->SQLs->SelectSQL->Add("AND YEARS_NUM=" + IntToStr(oytp->year));
tRec->SQLs->SelectSQL->Add("AND PER_ID=" + IntToStr(oytp->per));
tRec->SQLs->SelectSQL->Add("AND TYP_ID=" + IntToStr(oytp->type));
tRec->Open();
tTransact->Commit(); | |
|
olegenty |
Отправлено: 07.02.2005, 17:03 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
а чем тебе не подходят параметрические запросы???
|
|
telepath |
Отправлено: 07.02.2005, 17:10 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Тот код, что я привел, как-то криво работает (или я что-то наломал).
Вобщем обращение к таблице идет через treeview, в ветках которого хранятся sql-запросы. При удалении записи и повторном нажатии на удаленный узел, показывает что есть там пустая запись, в от после второго нажатия — запись исчезает. Как будто Commit запаздывает. |
|
olegenty |
Отправлено: 08.02.2005, 11:08 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
да, и я не обратил внимания — не Open, а ExecQuery надо использовать для инструкций, не возвращающих наборов данных.
|
|
telepath |
Отправлено: 08.02.2005, 14:22 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
А сам запрос в SelectSQL писать или где? |
|
olegenty |
Отправлено: 08.02.2005, 14:50 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
TpFIBQuery::SQL
всё, что не возвращает наборов данных должно делаться в TpFIBQuery
|
|
telepath |
Отправлено: 08.02.2005, 15:00 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Спасибо, есть проблема: после удаления (как я описывал выше), попытка внести записи оканчивается сообщением о невозможности записи в закрытый tRes. это по той же причине? |
|
telepath |
Отправлено: 08.02.2005, 16:23 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Все, разобрался, еще раз спасибо! |
|
olegenty |
Отправлено: 08.02.2005, 16:51 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
это тебе не ADO + MSSQL, IB/FB не поддерживают скриптов с клиента.
|
|
telepath |
Отправлено: 08.02.2005, 17:10 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Сорри, еще раз с Query возникла проблема — вот запрос:
CODE | tQuery->SQL->Add("INSERT INTO RES (REC_ID, CODE_ID, SUMW, SUMB,SUMYW, SUMYB)");
tQuery->SQL->Add("VALUES (" + IntToStr(idr)+ "," + IntToStr(c_id) + "," + FloatToStr(sw) + "," + FloatToStr(sb) + "," + FloatToStr(syw) + "," + FloatToStr(syb) + ")"); |
но он не выполняется, потому что FloatToStr делает из флоат строку с запятыми... в результате Query воспринимает дробную часть как еще одно значение. Помогите, как это обойти?
Отредактировано telepath — 08/02/2005, 18:13 |
|
olegenty |
Отправлено: 09.02.2005, 07:46 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
a) Разобраться с региональными настройками/языковыми параметрами
б) Как и было предложено ранее — снизойти до параметрических запросов.
поясню.
допустим, есть запрос
SQL | SELECT * FROM SOME_TABLE WHERE SOME_DATE_FIELD = :DATE
|
здесь :DATE — это параметр
обращаться к нему так:
CODE |
pFIBQuery->ParamByName("DATE")->AsDateTime = Now();
|
плюсы: запрос, попмипо прочего будет подготавливаться только 1 раз (prepare), в то время как при перезаписи SQL он подготавливается ежеразно.
|
|
AVC |
Отправлено: 09.02.2005, 09:42 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
потому что FloatToStr делает из флоат строку с запятыми... в результате Query воспринимает дробную часть как еще одно значение
|
Включаете в Main следующий код
CODE |
Application->UpdateFormatSettings = false;
DecimalSeparator = '.';
ListSeparator = ',';
DateSeparator = '.';
ShortDateFormat = "dd.mm.yyyy";
|
и после этого приложение "плевать хотело" на языковые настройки винды
(эти настройки должны соответствовать настройкам сервера БД)
|
|
olegenty |
Отправлено: 11.02.2005, 10:25 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
опа! а вот этой фичи-то я и не знал. век живи, век учись!
|
|
AVC |
Отправлено: 11.02.2005, 11:47 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Ну тогда еще одна.
Замена раскладкам клавиатуры так, что бы они в русском режиме на доколнительной клавиатуре при нажатии точки печатали именно точку а не запятую.
kbdru.kbd для 98 (кажется и на 95, но давно дело было)
kbdru.dll для 2k
|
|