Конференция "Базы" » ADO API определить количество записей [D7, WinXP]
 
  • Dmitry_177 (27.05.08 13:13) [0]
    Делаю соединение с БД и затем посредством SQL-запроса нужно считать информацию с таблицы.. Соединение с SQL-запросом сделал так:
    var
     DBConnection: _Connection;
     DBRecordset: _Recordset;

    begin
       try
         DBConnection := CoConnection.Create;
         DBConnection.Provider := 'Microsoft.Jet.OLEDB.4.0';
         DBConnection.ConnectionString := 'Data Source=c:\1.mdb';
         DBConnection.Open('', '', '', -1);

         DBRecordset := CoRecordSet.Create;
         DBRecordset.Open('SELECT * FROM table', DBConnection, adOpenForwardOnly, adLockPessimistic, adCmdText);



    теперь нужно считать все из DBRecordset.. Но.. DBRecordset.RecordCount почему-то всегда равно "-1", по идее это количество записей, которые какраз нужно считать.. Но т.к. оно равно "-1" этот код уже не будет работать:
         for iRec := 0 to DBRecordset.RecordCount - 1 do
           begin
             AddInTable(string(DBRecordset.Fields.Item[1].Value), string(DBRecordset.Fields.Item[2].Value));

             DBRecordset.MoveNext;
           end;



    Подскажите пожалуйста как можно определить количество записей в DBRecordset чтобы потом в цикле считать их? Или может как-то еще можно?
  • Palladin © (27.05.08 13:24) [1]

    > DBRecordset.RecordCount почему-то всегда равно "-1", по
    > идее это количество записей, которые какраз нужно считать.
    > .

    идея твоя порочна. забудь про RecordCount вообще.

    кроме for в паскале есть и другие циклы, а у рекордсета есть свойство eof

    думай
  • Reindeer Moss Eater © (27.05.08 13:25) [2]
    как можно определить количество записей в DBRecordset чтобы потом в цикле считать их?

    Для этого не надо знать количество записей.
  • Dmitry_177 (27.05.08 13:27) [3]
         repeat
           AddInTable(string(DBRecordset.Fields.Item[1].Value), string(DBRecordset.Fields.Item[2].Value));
           DBRecordset.MoveNext;
         until
           DBRecordset.EOF;



    придумал ))
  • Reindeer Moss Eater © (27.05.08 13:35) [4]
    а если рекордсет пустой?
  • Anatoly Podgoretsky © (27.05.08 13:37) [5]
    > Dmitry_177  (27.05.2008 13:27:03)  [3]

    Ну тогда готовься к исключению.
  • Smile (27.05.08 13:47) [6]
    Вместо repeat until используй
    While not DBRecordset.EOF do
    begin

    end;
  • Dmitry_177 (27.05.08 15:28) [7]

    > а если рекордсет пустой?


    > Ну тогда готовься к исключению.


    > Вместо repeat until используй
    > While not DBRecordset.EOF do
    > begin
    >
    > end;

    По идее так не должно исключения возникнуть.. Я правильно понимаю?
  • palva © (27.05.08 16:42) [8]

    > Я правильно понимаю?

    Правильно.
 
Конференция "Базы" » ADO API определить количество записей [D7, WinXP]
Есть новые Нет новых   [134434   +28][b:0][p:0.001]