2010-06-30 6 views
-1

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

Вот выражение 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; 
+0

Правильно ли я считаю, что BDE, ADO и Delphi 2010 на самом деле не имеют никакого отношения к вашему вопросу? Вы действительно просто спрашиваете, что значит «с помощью Tquery.Create (nil)», правильно? –

+1

Правильно ли этот код? Вы создаете TQuery и используете его свойство Eof (из-за с), но затем вы повторяете rs. Более того, я бы использовал параметры в предложении where, надеюсь, что вход проверен и подвергнут санитарной обработке, или «забавные» вещи могут произойти, если ваш пользователь достаточно квалифицирован (помимо того, что, вероятно, заставляет запрос жестко анализировать каждый раз). – 2010-06-30 21:14:38

+0

Поскольку ваша проблема была в конце, а не с кодом, который вы опубликовали, вы должны изменить свой вопрос или удалить его, чтобы сделать StackOverflow более полезным местом с меньшим уровнем шума. –

ответ

1

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

+0

Я решил проблему. Соединение DB открывается в форме create, у меня возникла проблема избыточности – James

1

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

with Tquery.Create(nil) do 
try 
    .. 
    .. 
finally 
    free; 
end; 
2

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

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

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

Смежные вопросы