2010-11-23 4 views
0

SELECT 문을 사용하여 ADOQuery에 연결된 DBGrid가 있습니다.모든 레코드에 대해 하나의 필드를 업데이트 하시겠습니까?

모든 레코드에 대해 하나의 필드를 업데이트하고 싶습니다. 예를 들어, 일부 데이터를 텍스트 상자에 입력하면 모든 레코드의 필드 "이름"(예제)이 변경됩니다.

+0

내 조언 당신을 당신의 질문을 정교하게 만드는 것입니다. 특정 문제와 관련된 모든 사항을 포함하여 상황을 설명하기 위해 더 나은 노력을 기울이는 것이 바람직합니다. 이 경우 SELECT의 특성 (일부 선택 결과 집합은 데이터베이스 수준에서만 읽음) 및 데이터베이스에서 수행하거나이 동일한 ADOQuery 구성 요소를 사용하려는 경우와 같은 사항이 있습니다. 사람들이 당신을 도우려고 시간을 투자 (또는 낭비)하기를 원한다면, 사람들이 처음에 자신의 상황을 이해하도록 노력하면서 시간을 투자하면 더 좋습니다. – jachguate

답변

5

이 목적으로 검색어를 실행할 수 있습니다.

"UPDATE table SET name = textBox.text"; 의 구문을 따른다. where 절을 사용하지 않고 해당 필드를 변경하면 모든 enteries가 변경됩니다.

+0

얘야, 내 Adoquery는 select 명령이고 dbgrid는 그 테이블을 보여 주며이 select는 일부 테이블 (하나의 테이블뿐만 아니라)의 join 일 수도있다. – micheal

+1

@micheal, select는 여러 테이블을 조인한다고 말하지 않았지만 Isha는 맞습니다. 그 후에 그리드를 업데이트하고 새로 고침 할 수 있습니다. –

+0

테이블을 조인하더라도 필드는 하나만 올 것입니다. 그 필드가 UNION으로부터 온다면 더 복잡한 상황이 될 것입니다. –

1

SQL UPDATE 문을 사용하여 모든 레코드를 한 번에 업데이트 할 수 있습니다.

당신이 원하지 않는 (또는 할 수없는) 어떤 이유에 대한 SQL UPDATE를 사용하여 ADO 레코드 집합을 사용하여 업데이트를 수행 할 경우이 같은 코드를 작성할 수 있습니다

var 
    AField : TField; 
begin 
    Assert(AdoQuery1.Active, 'Dataset is not active!'); 
    try 
    AdoQuery1.DisableControls; 
    AField := AdoQuery1.FieldByName('MyFieldName'); 
    AdoQuery1.First; 
    while not AdoQuery1.Eof do 
    begin 
     AdoQuery1.Edit; 
     AField.Value := Edit1.Text; 
     AdoQuery1.Post; 
     AdoQuery1.Next; 
    end; 
    finally 
    AdoQuery1.EnableControls; 
    end; 
end; 
+0

FieldByName을 루프 밖으로 넣으십시오. 로컬 Field 객체에 참조를 저장 한 다음 루프에서 사용합니다. 나는이 시간을보고 아예 생산 코드에서 다시 한 번 신물이났다. –

+0

@Francois, 예, 루프에서 FieldByName을 사용하면 성능 단점이 있지만 이는 프로덕션 코드가 아니며 필자는 레코드를 반복 할 수있는 방법을 알기 쉽게 작성했습니다. 어쨌든 귀하의 요청 사항을 반영하여 변경했습니다. – vcldeveloper

+0

감사합니다. 처음에 여기 저기에서 수확 된 너겟 (nuggets)에서 생산 코드로 본 적이 몇 번이나 있었는지 상상할 수는 없지만 그럼에도 불구하고 ... –

관련 문제