2013-10-23 3 views
0

일단 DBGrid에 반영된 SQL 업데이트 문을 통해 일부 필드 데이터를 변경하면 올바른 방법이 올바른지 확실하지 않은 경우 -> IBTable.Refresh. 어쨌든, 그것은 잠시 동안 작동하지만 첫 번째 새로 고침 시도 후 DBGrid의 세로 스크롤 막대가 맨 아래로 이동합니다. 다시 업데이트 한 다음 다시 새로 고치면 세로 스크롤 막대가 작아지고 DBGrid 중간으로 이동합니다. DBGrid 자체에서 값을 직접 변경하여 일부 필드의 값을 직접 업데이트하는 방법을 모르겠습니다. 누군가가 나에게 예제를 보여 주면 감사하겠습니다.DBGrid의 스크롤 막대를 위로 이동하는 방법 (델파이)

IBTable.Refresh가 실행되고 최상위 행을 선택한 후에 DBgrid의 세로 스크롤 막대를 맨 위 위치로 옮기는 방법은 무엇입니까?

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    //open IBQuery1, SQL command is in the component itself 
    IBQuery1.Open; 
    Label1.Caption := 'Tokyo''s budget was $' + TCaption(IBQuery1.FieldValues['BUDGET']); 
    //clear all SQL commands as it's TStrings and remembers prev. added lines 
    IBUpdateSQL1.ModifySQL.Clear; 
    //start building the SQL update statement 
    IBUpdateSQL1.ModifySQL.Append('update DEPARTMENT'); 
    if IBQuery1.FieldValues['BUDGET'] = '30000' then 
    IBUpdateSQL1.ModifySQL.Append('set BUDGET = 500000') 
    else 
    IBUpdateSQL1.ModifySQL.Append('set BUDGET = 30000'); 
    IBUpdateSQL1.ModifySQL.Append('where LOCATION = ''Tokyo'''); 
    //execute SQL update 
    IBUpdateSQL1.ExecSQL(ukModify); 
    //close IBQuery1 
    IBQuery1.Close; 
    //let's see new field data 
    IBTable1.Refresh; 
end; 

내가 뭐하는 거지 것은 선택 문에서 일부 필드 데이터를 읽고, 그리고 변화 : 난 아직도뿐만 아니라 예를 들어 직원 데이터베이스를 사용하여 데이터베이스 (파이어 버드)와 델파이를 배우고로

내 코드는 간단하다 그에 따라 다른 값으로 그리고 그 반대도 마찬가지입니다.

감사

+0

SO! 공유 할 수있는 UI 코드가 있습니까? 이것은 단지 버튼 클릭 기능입니다. – Derek

+2

'IBTable1.First'를 호출하는 것은 어떻습니까? –

답변

0

"난 그냥 DBGrid를 자체를 변경하여 직접 일부 필드에 값을 업데이트하는 방법을 모르는 사람이 어떻게 나에게의 예를 보여 주면, 나는 그것을 감사드립니다."

걱정할 필요가 없습니다. 이 간단한 구성을 대신 사용해보십시오.

양식에 다음 컨트롤을 배치하십시오.

  1. TIBDatabase (툴 팔레트 - 인터베이스)
  2. TIBTransaction (툴 팔레트 - 인터베이스)
  3. TIBQuery (툴 팔레트 - 인터베이스)
  4. TDataSetProvider (툴 팔레트 - 데이터 액세스)
  5. TClientDataSet (도구 팔레트 - 데이터 액세스)
  6. TDataSource (도구 팔레트 - 데이터 액세스)
  7. TDBGrid (툴 팔레트 - 데이터 컨트롤)
  8. TButton (툴 팔레트 - 표준)

지금의 그들를 연결 할 수 있습니다. Object Inspector를 사용하여 컨트롤이 함께 작동하도록 일부 속성을 설정합니다.

  1. IBDatabase1는 : IBDatabase1
  2. IBQuery1에 DefaultDatabase을 설정 : IBDatabase1
  3. IBQuery1에 Database을 설정 IBTransaction1 (오브젝트 인스펙터에서 사용 드롭 다운리스트)
  4. IBTransaction1에 DefaultTransaction을 설정 IBTransaction1
  5. 현재 DataSetProvider1에 Transaction 설정 : DataSet ~ IBQuery1
  6. ClientDataSet1 : 설정 ProviderName 현재 DataSetProvider1에
  7. DataSource1 : ClientDataSet1
  8. DBGrid1에 DataSet을 설정 DataSource1에 DataSource을 설정

이제 데이터베이스

  1. IBDatabase1에 특정한 몇 가지 다른 속성을 설정합니다 설정 DatabaseName, LoginPrompt, Params
  2. IBQuery1 : 설정 SQL

이제 몇 가지 컨트롤을 활성화하십시오. Object Inspector를 사용하여 디자인 타임에이 작업을 수행하거나 동등한 코드 (예 : IBDatabase1.Connected := True)를 작성하여 원하는 경우 버튼의 클릭 이벤트에 배치 할 수 있습니다.

  1. 옆으로 (지금은 약간의 딸꾹질을 당신의 ClientDataSet에 (True로 ClientDataSet1.Active 설정)

을 활성화

  • 가 활성화 당신의 쿼리 (True로 IBQuery1.Active 설정)을 데이터베이스 (True로 IBDatabase1.Connected 설정)를 연결) DBGrid에 완전히 편집 가능한 데이터 세트가 있어야합니다. 여기를 클릭하고 원하는대로 편집하십시오. 다른 버튼의 클릭 이벤트에 다음 코드를 작성하려면 변경 사항을 저장해야합니다.

    ClientDataSet1.Post; 
    ClientDataSet1.ApplyUpdates(-1); 
    

    이이 작업을 수행 할 수있는 유일한 방법은 아니다, 거기에 개선의 여지가 많이하지만 지금 당신은 당신이 선택하는 어느 방향으로 진행하는의 좋은 출발점이 있어야합니다.