Конференция "Базы" » Интересная вещь в ADO [D7]
 
  • Игорь Шевченко © (26.07.11 20:54) [20]

    > а глючит, когда они есть


    object Form1: TForm1
     Left = 0
     Top = 0
     Caption = 'Form1'
     ClientHeight = 293
     ClientWidth = 426
     Color = clBtnFace
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWindowText
     Font.Height = -11
     Font.Name = 'Tahoma'
     Font.Style = []
     OldCreateOrder = False
     PixelsPerInch = 96
     TextHeight = 13
     object Button1: TButton
       Left = 332
       Top = 252
       Width = 75
       Height = 25
       Caption = 'Button1'
       TabOrder = 0
       OnClick = Button1Click
     end
     object db: TADOConnection
       Connected = True
       ConnectionString =
         'Provider=OraOLEDB.Oracle.1;Password=bar;Persist Security I' +
         'nfo=True;User ID=foo;Data Source=sles10'
       Provider = 'OraOLEDB.Oracle.1'
       Left = 32
       Top = 24
     end
     object ds: TADODataSet
       Connection = db
       CommandText = 'SELECT COUNT(*) FROM arg_city WHERE country_code = :CC'
       Parameters = <
         item
           Name = 'CC'
           DataType = ftString
           Size = -1
           Value = Null
         end>
       Left = 128
       Top = 24
     end
    end



    procedure TForm1.Button1Click(Sender: TObject);
    begin
     db.Connected := true;
     ds.Parameters.ParamByName('CC').Value := 'RU';
     ds.Open;
     try
       ShowMessageFmt('count = %s', [ds.Fields[0].AsString]);
     finally
       ds.Close;
     end;
    end;



    И с параметрами не глючит. Это у тебя ADO кривое (или еще что)
  • SQLEXPRESS (26.07.11 20:59) [21]
    теперь ты их в дизайне определил, а глючит, когда не до определишь в рантайме
    да и не глючит, а аккуратнее надо быть просто.
    У нас изначально какой вопрос был? Как автор такого добился. Я нашел как - именно если параметры в where не до определены.
  • Игорь Шевченко © (26.07.11 21:42) [22]

    > У нас изначально какой вопрос был?


    У автора параметров изначально не было вообще. Ву компрене ?


    >  Как автор такого добился.


    автору давно пофиг, на вопрос в [5] ответа нет и не будет.

    Но, включив телепатор, могу предположить, что у автора кривой/не тот провайдер, кривое ADO или кривое то, что у программистов обычно из задницы растет.

    Более того, изменив пример на ADOQuery (вдруг местные последователи ислама правы в своих нападках на TADOQuery? )
    я получил точно такой же результат, как с ADODataSet

    object Form1: TForm1
     Left = 0
     Top = 0
     Caption = 'Form1'
     ClientHeight = 293
     ClientWidth = 426
     Color = clBtnFace
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWindowText
     Font.Height = -11
     Font.Name = 'Tahoma'
     Font.Style = []
     OldCreateOrder = False
     PixelsPerInch = 96
     TextHeight = 13
     object Button1: TButton
       Left = 340
       Top = 224
       Width = 75
       Height = 25
       Caption = 'Button1'
       TabOrder = 0
       OnClick = Button1Click
     end
     object Button2: TButton
       Left = 340
       Top = 260
       Width = 75
       Height = 25
       Caption = 'Button2'
       TabOrder = 1
       OnClick = Button2Click
     end
     object db: TADOConnection
       ConnectionString =
         'Provider=OraOLEDB.Oracle.1;Password=bar;Persist Security I' +
         'nfo=True;User ID=foo;Data Source=sles10'
       Provider = 'OraOLEDB.Oracle.1'
       Left = 32
       Top = 24
     end
     object ds: TADODataSet
       Connection = db
       CommandText = 'SELECT COUNT(*) FROM arg_city WHERE country_code = :CC'
       Parameters = <
         item
           Name = 'CC'
           DataType = ftString
           Size = -1
           Value = Null
         end>
       Left = 128
       Top = 24
     end
     object q: TADOQuery
       Connection = db
       Parameters = <>
       SQL.Strings = (
         'SELECT COUNT(*)
    FROM arg_city WHERE country_code = '
    #39'RU'#39)
       Left = 204
       Top = 24
     end
    end



    unit main;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, DB, ADODB, StdCtrls;

    type
     TForm1 = class(TForm)
       db: TADOConnection;
       ds: TADODataSet;
       Button1: TButton;
       q: TADOQuery;
       Button2: TButton;
       procedure Button1Click(Sender: TObject);
       procedure Button2Click(Sender: TObject);
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     db.Connected := true;
     ds.Parameters.ParamByName('CC').Value := 'RU';
     ds.Open;
     try
       ShowMessageFmt('count = %s', [ds.Fields[0].AsString]);
     finally
       ds.Close;
     end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
     db.Connected := true;
     q.Open;
     try
       ShowMessageFmt('count = %s', [q.Fields[0].AsString]);
     finally
       q.Close;
     end;
    end;

    end.



    число записей одинаковое.
 
Конференция "Базы" » Интересная вещь в ADO [D7]
Есть новые Нет новых   [134431   +10][b:0][p:0.003]