Преобразование BDE в ADO в DELPHI 2010 - PullRequest
0 голосов
/ 30 июня 2010

Я работаю над преобразованием BDE в ADO для моей компании. Я столкнулся с выражением, я не могу понять, как преобразовать в ADO

Вот выражение BDE со всеми изменениями ADO, кроме одного .... Часть, которая вызывает у меня проблемы, это

с Tquery.Create (nil) сделать в начале. Есть идеи?

  with Tquery.Create(nil) do
        begin
            cmd := TStringList.Create;
            cmd.Add('select top 3 csnttext from casenotesint');
            cmd.Add('where csntcaseid = ''' + scasenum + ''' ');
            cmd.Add('and csntclmid = ''' + sclmnumber + ssplitcode + ''' ');
            cmd.Add('order by csntseqnum desc');
            rs := fConnection.Execute(cmd.Text);
            cmd.Free;

            while not Eof do
            begin
                SAPrintReport1.Tab(0.5);
                SAPrintReport1.Print(rs.Fields.Item('CsNtText').Value);
                SAPrintReport1.NewLine;
                rs.next;
            end;
            rs.Close;
        end;
        if cbxSpacer.checked then
        begin
            SAPrintReport1.NewLine;
            SAPrintReport1.NewLine;
            SAPrintReport1.NewLine;
        end;

Ответы [ 3 ]

2 голосов
/ 01 июля 2010
Оператор

A with приводит членов данного объекта в область видимости, поэтому вы можете упоминать его поля, методы и свойства, не указывая их имя объекта, которому они принадлежат. Пожалуйста, смотрите с заявлениями в документации.

Одной вещью, которую можно добавить в оператор with, является объект, который был только что создан. Это тот случай, здесь. Код создает новый объект TQuery и сразу же неявно использует все его члены. Ссылка на этот объект не хранится ни в одной локальной переменной, поэтому нет явного способа обратиться к нему, но это не беспокоит компилятор. (Тем не менее, это может беспокоить людей, что является одной из причин, по которой вы не сможете использовать with в Delphi.)

Идентификаторы, которые не принадлежат данному объекту, ищутся в следующей окружающей области видимости. Похоже, что единственный идентификатор из TQuery, используемый в этом блоке with, является Eof, поэтому код, который вы конвертируете, в любом случае, вероятно, неверен. Возможно, было бы лучше просто выяснить, что код должен делать, а затем написать для этого новый код ADO.

1 голос
/ 30 июня 2010

IMO, вы должны использовать try..finally..free..end; В противном случае вы создаете запрос и никогда не освобождаете его. то есть строка 2 должна быть "попробовать".

with Tquery.Create(nil) do 
try
  ..  
  ..  
finally
  free;
end; 
1 голос
/ 30 июня 2010

Вы пытались изменить TQuery на TADOQuery, и что тогда происходит?

...