Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.184.149] |
|
Сообщ.
#1
,
|
|
|
Помогите с запром.
DATA_IZM / FOREIGN_SOOTV_ADR / DOM 21.10.2011/ 1 / 211 24.10.2011/ 1 / 18 23.10.2011/ 1 / 18 После запроса должно получиться. DATA_IZM / FOREIGN_SOOTV_ADR / DOM 21.10.2011/ 1 / 211 24.10.2011/ 1 / 18 т.е. DATA_IZM + (MAX(DATA_IZM) where OREIGN_SOOTV_ADR=1 AND DOM=18) AND where DATA_IZM <='30.10.2011' select SSA.DATA_IZM, SSA.FOREIGN_SOOTV_ADR, SSA.DOM from SOOTV_SOTR_ADR SSA where SSA.DATA_IZM<='30.10.2011' Добавлено select DATA_IZM, SSA.FOREIGN_SOOTV_ADR, SSA.DOM from SOOTV_SOTR_ADR SSA where SSA.DOM=SSA.DOM AND SSA.FOREIGN_SOOTV_ADR=SSA.FOREIGN_SOOTV_ADR AND SSA.DATA_IZM<='30.10.2011' AND (SSA.DATA_IZM=(select MAX(DATA_IZM) from SOOTV_SOTR_ADR SSA where SSA.DOM=SSA.DOM AND SSA.FOREIGN_SOOTV_ADR=SSA.FOREIGN_SOOTV_ADR)) Таким образом выдает только значения, где дата максимальна. |
Сообщ.
#2
,
|
|
|
может так надо?
select max(DATA_IZM), FOREIGN_SOOTV_ADR, DOM from SOOTV_SOTR_ADR where DATA_IZM<='30.10.2011' group by FOREIGN_SOOTV_ADR, DOM; |
Сообщ.
#3
,
|
|
|
Спасибо:)
Может подскажите еще под одному вопросу. в Grid выводится результат запроса (2 строки). Нужно переписать значения полученных строк на новую дату. Перезаписывается только первая строка. Что нужно изменить, чтоб записывались и остальноые строки, типа пока не конец. void __fastcall TFrame_SH_SOTR::bbtNaDatuClick(TObject *Sender) { int IRow=1; int SOTR=StrToInt(dmOne->Val1_po_Val2("SPR_SOTR","KOD","NAIM",cbSotr->Text)); dmOne->IBQTwo->SQL->Text="update or insert into SOOTV_SOTR_ADR (DATA_IZM, FORIGN_SPR_SOTR, DOM, FOREIGN_SOOTV_ADR)" " values (:DATA,:SOTR,:DOM,:ADRES)"; dmOne->IBQTwo->ParamByName("DATA")->AsString=dtpProsm->Date; dmOne->IBQTwo->ParamByName("SOTR")->AsInteger=SOTR; dmOne->IBQTwo->ParamByName("DOM")->AsString=sgUth->Cells[2][IRow]; dmOne->IBQTwo->ParamByName("ADRES")->AsString=sgUth->Cells[6][IRow]; try { dmOne->IBQTwo->Prepare(); dmOne->IBQTwo->ExecSQL(); dmOne->IBTROne->Commit(); dmOne->IBQTwo->Close(); cbSotrExit(Sender); MessageDlg("Данные сохранены.", mtInformation,TMsgDlgButtons()<<mbOK ,0); } catch (...) { MessageDlg("Изменения не сохранены!", mtError,TMsgDlgButtons()<<mbOK ,0); } } |
Сообщ.
#4
,
|
|
|
вероятно надо в запрос UPDATE добавить условие WHERE и сделать цикл по строкам (насколько я понял у вас это IRow).
for (IRow = 1; IRow < !!!MAX?!!!; IRow++) { ... SQL->Text = ... UPDATE sootv_sotr_adr SET DATA_IZM=:DATA AND DOM=:DOM WHERE FOREIGN_SPR_SOTR=:SORT AND FOREIGN_SOOTV_ADR=:ADRES ... } Не знаю вашей модели данных, поэтому написал наугад. Вам потребуется изенить содержимое для SET и WHERE под ваши условия. И еще "update or insert" плохой оператор. Не знаю какую СУБД вы используете, но надежнее и понятнее будет отдельно делать либо insert, либо update. В вашем случае, как я понял, нужен только update, так данные уже есть в таблице Цитата Нужно переписать значения полученных строк на новую дату. |
Сообщ.
#5
,
|
|
|
Может кто поможет с запросом.
{ int IRowM=1; dmOne->ClearGrid(sgTarif); sgTarif->ColCount=2; sgTarif->Cells[0][0]="Дата"; sgTarif->Cells[1][0]="Тариф"; int NOM=StrToInt(edNom->Text); dmOne->IBQTwo->SQL->Text="select * from GET_TARIF(:NOM,'01.01.1000','NOW') "; dmOne->IBQTwo->ParamByName("NOM")->Value=NOM; dmOne->IBQTwo->Prepare(); dmOne->IBQTwo->Active=true; while (!dmOne->IBQTwo->Eof) { sgTarif->Cells[0][IRowM]=dmOne->IBQTwo->FieldByName("DAT_TARIF")->AsString; sgTarif->Cells[1][IRowM]=dmOne->IBQTwo->FieldByName("NAIM_TR")->AsString; dmOne->IBQTwo->Next(); IRowM++; } dmOne->IBQTwo->Close(); } Получаем значение только первой строки из таблицы. По циклу ходит,но значения следующих строк не выводятся. |