![]() |
|
|
#1
|
|||
|
|||
|
Всем добра! Проблема такая...есть 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
|
|||
|
|||
|
все решил, всем спасибо за помощь!
|