|
#1
|
|||
|
|||
2 Adoquery
Всем добра! Проблема такая...есть 2 adoquery. в обоих есть столбец с данными "ГН". Нужно сделать так чтобы в адо2 выгрузилось время которое соответсвует "ГН" в адо1. в адо2 "ГН" в 4 столбце, в адо1 "ГН" во 2 столбце, "время" указано в 4 столбце. Нужно данные из столбца 4 адо1 соответствующие "ГН" записать в столбец 5 адо2. С циклами у меня туго, поогите пожалуйста написать код
|
#2
|
||||
|
||||
Цитата:
Циклами так: Код:
procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery1.First; while not ADOQuery1.Eof do begin if ADOQuery2.Locate('ГН', ADOQuery1['ГН'], []) then begin ADOQuery2.Edit; ADOQuery2['Время'] := ADOQuery1['Время']; ADOQuery2.Post; end; ADOQuery1.Next; end; end; |
#3
|
|||
|
|||
сделал как ты посоветовал, но он у меня не находит идентичные гаражные...проверял через точку остановы. у меня запрос из базы организуется с обрезанием имени "ГН"
Код:
ADOQuery1.SQL.Add('select * from (SELECT *, IIF(unit = "Ñ÷èòûâàòåëü 2-2", "çàåçä", "âûåçä") as new_str, mid(name,10) as new_str1 FROM events where events.message = "ïðîõîä ñîâåðøåí")order by new_str1'); |
#4
|
||||
|
||||
Цитата:
И ещё у метода Locate есть параметр loPartialKey который позволяет искать по частичному совпадению: Код:
ADOQuery2.Locate('ГН', ADOQuery1['ГН'], [loPartialKey]); |
#5
|
|||
|
|||
для проверки ввел две переменные, в отладчике смотрю, они обе равны "103". Но все равно пробегает мимо бегина с эдитом
Код:
begin ADOQuery2.First; while not ADOQuery1.Eof do begin d:= ADOQuery1['new_str1']; f:= ADOQuery2['garn']; if ADOQuery2.Locate('garn', ADOQuery1['new_str1'], []) then begin ADOQuery2.Edit; k := ADOQuery1['datetime']; ADOQuery2.Post; end; ADOQuery2.Next; end; end; вставил поиск по части имени, тоже не помогло |
#6
|
||||
|
||||
Цитата:
Попробуй так: Код:
if ADOQuery2.Locate('garn', ADOQuery1.FieldByName('new_str1').AsInteger, []) then |
#7
|
|||
|
|||
данные текстового типа. не помогает
|
#8
|
||||
|
||||
Цитата:
|
#9
|
|||
|
|||
если пишу так
Код:
begin ADOQuery2.First; while not ADOQuery1.Eof do begin d:= ADOQuery1['new_str1']; f:= ADOQuery2['garn']; if ADOQuery2.Locate('garn', ADOQuery1.FieldByName('new_str1').AsString, [loPartialKey]) then begin ADOQuery2.Edit; k := ADOQuery1['datetime']; ADOQuery2.Post; end; ADOQuery2.Next; end; end; Код:
begin ADOQuery2.First; while not ADOQuery1.Eof do begin d:= ADOQuery1['new_str1']; f:= ADOQuery2['garn']; if ADOQuery2.Locate(adoquery2.fieldbyname('garn').AsString, ADOQuery1.FieldByName('new_str1').AsString, [loPartialKey]) then begin ADOQuery2.Edit; k := ADOQuery1['datetime']; ADOQuery2.Post; end; ADOQuery2.Next; end; end; |
#10
|
||||
|
||||
Цитата:
Цитата:
|
#11
|
|||
|
|||
т.е. если я правильно понимаю то правильно будет так?
Код:
if ADOQuery2.Locate('garn', ADOQuery1.FieldByName('new_str1').AsString, []) then в этом случае он постоянно заходит в бегин. поля garn и new_str1 точно не пустые! |
#12
|
|||
|
|||
причем навожу курсор на asstring в этой строке
Код:
if ADOQuery2.Locate(adoquery2.fieldbyname('garn').AsString, ADOQuery1.FieldByName('new_str1').AsString, [loPartialKey]) then |
#13
|
||||
|
||||
Цитата:
Код:
if ADOQuery2.Locate('garn', ADOQuery1.FieldByName('new_str1').AsString, []) then begin ShowMessageFmt('Я зашёл сюда, потому что в ADOQuery2 в записи №%d поле garn имеет значение "%s"'+ ' и в ADOQuery1 в записи №%d поле new_str1 тоже имеет значение "%s"', [ ADOQuery2.RecNo, ADOQuery2.FieldByName('garn').AsString, ADOQuery1.RecNo, ADOQuery1.FieldByName('new_str1').AsString ]); ..... Цитата:
|
#14
|
|||
|
|||
Решил не использовать локейт...написал такой код
Код:
begin adoquery1.First; while not adoquery2.Eof do begin ADOQuery2.First; while not ADOQuery1.Eof do begin d:= ADOQuery1['new_str1']; f:= ADOQuery2['garn']; if f=d then begin ADOQuery2.Edit; adoquery2['fio2'] := ADOQuery1['datetime']; ADOQuery2.Post; end; ADOQuery2.Next; end; adoquery1.Next; end; end; |
#15
|
|||
|
|||
все решил, всем спасибо за помощь!
|