for I := 0 to FDQuery1.RecordCount - 1 do begin id := FDQuery1.FieldByName('PkgID').AsString; name := FDQuery1.FieldByName('PkgName').AsString; Memo1.Lines.Add(id + ':' + name); FDQuery1.Next; end; end;
替换成下面的. 在某个条件下 fdquery1.recordcount 这个取得并不是全部数据的记录总数 procedure TForm1.Button1Click(Sender: TObject); var id,name: String; I: Integer; begin FDConnection1.Params.Database := ExtractFilePath(Application.ExeName)+'data.db'; Memo1.Clear; FDQuery1.Close; FDQuery1.SQL.Clear; FDQuery1.SQL.Add('SELECT * FROM tbl_Package');
try FDQuery1.Open; except Application.MessageBox('无法查询数据库', '出错', MB_OK + MB_ICONSTOP); end; while not fdquery1.eof do begin id := FDQuery1.FieldByName('PkgID').AsString; name := FDQuery1.FieldByName('PkgName').AsString; Memo1.Lines.Add(id + ':' + name); fdquery1.next; end; end;
----------------------------------------------
-
初步排查问题应该是FireDAC对中文不友好照成的.建议直接使用SQLlite 附件里有相关控件 例子 SQLiteDatabase := TSQLiteDatabase.Create(ExtractFilePath(Application.ExeName) + 'data.db'); SQLiteTable := TSQLiteTable.Create(SQLiteDatabase, 'SELECT * FROM tbl_Package'); while not SQLiteTable.eof do begin id := SQLiteTable.FieldByName['PkgID']; name := SQLiteTable.FieldByName['PkgName']; Memo1.Lines.Add(id + ':' + name); SQLiteTable.next; end; SQLiteDatabase.Free;