2012-11-26 3 views
0

양식에 텍스트 상자와 눈금이 있습니다.Delphi XE2에서 TTable 및 TDBGrid의 예기치 않은 동작

기능 : 해당 Emp ID에 해당하는 텍스트 상자에 Emp ID (예 : 1, 2, 3 등)를 입력하면 Emp Name이 데이터베이스의 Grid에 있어야합니다. 다른 Emp ID를 다시 입력하면 다른 Emp 이름이 다음 행의 눈금에 포함되어야합니다. emp 이름은 그리드의 다음 줄에 계속 이어져야합니다.

내가 할 수있는 한 내 질문을 설명했다고 생각합니다.

내 접근 나는 이것에 대한 TTable, TDatasource 및을 TDBGrid를 사용하고

합니다. 필자가 텍스트 상자에 Emp ID를 입력하고 Enter 키를 누르면 데이터베이스에서 Emp Name을 확인한 다음 해당 이름을 TTable에 추가합니다. 그런 다음이 TTable을 TDatasource에 할당하고 TDatasource를 TDBGrid에 할당합니다. 이

Table1.Close; 

//Create table for the first time 

if not Table1.Exists then 
begin 
     Table1.Close; 

     Table1.DatabaseName := 'databaseName'; 
     Table1.TableType   := ttParadox; 
     Table1.TableName   := 'MyTable'; 
     Table1.FieldDefs.Clear; 
     Table1.FieldDefs.Add('EmpName',ftString,40); 
     Table1.CreateTable; 

     Table1.Open; 
end; 

    Table1.Open; 
    Table1.Append; 
    Table1.FieldByName('EmpName').AsString := EmpName; //EmpName is fetched from database 
    Table1.Post; 
//Now assign this table to datasource 
     DataSource1.DataSet := Table1; 
//Now assign this datasource to dbgrid 
     DBGrid1.DataSource := DataSource1; 

내 문제에 대한 코드는 다음과 같은 : 내 문제는, 그리드에 표시된 레코드가 비정상적으로 행동하는 것입니다. 레코드는 적절한 순서로 표시되지 않지만 서로 섞여서 표시됩니다. 그리드의 데이터 행은 이전에 추가했던 순서대로 표시되지 않습니다. 무엇이 문제 일 수 있습니다. 매번 또는 다른 것을 바인딩하기 전에 일부 데이터 소스 또는 dbgrid를 새로 고쳐야합니까? 이걸 도와주세요.

+0

제발 뭔가를 제안하십시오 .... –

+0

왜이 질문에 -1? –

답변

0

레코드의 순서를 정의하려면 인덱스/기본 키를 사용해야합니다. 아래 코드와 같이 추가하십시오.

Table1.FieldDefs.Add('EmpId', ftAutoInc, 0, True); 
Table1.FieldDefs.Add('EmpName', ftString, 40); 
Table1.IndexDefs.Add('idxEmpId','EmpId',[ixPrimary]); 
Table1.CreateTable; 
Table1.Open; 

만 필요한 열을 보여 DBGrid.Columns 속성을 정의하여 격자보기에서 EMPID를 숨길 수 있습니다.