Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / procedure & variant / 15 сообщений из 15, страница 1 из 1
24.09.2003, 15:00
    #32274253
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure proc (var a: variant)
begin
  a:= 5 ;
end;

procedure main1;
var
  a: Real;
begin
   proc(a);
end;

procedure mail2;
var
  a: Integer;
begin
   proc(a);  
end;


Не работает, работает, только если и обьявить как a: Variant. Пробовал и proc(Integer(a)), не помогает, как сделать чтоб работало???
...
Рейтинг: 0 / 0
24.09.2003, 15:26
    #32274324
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
Что не работает?
...
Рейтинг: 0 / 0
24.09.2003, 15:31
    #32274335
GroZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
конечно не будет работать ... в процедуру параметр передаётся то по ссылке !
...
Рейтинг: 0 / 0
24.09.2003, 15:35
    #32274341
GroZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
это делается так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function proc (a: variant) : variant;
begin
  Result := a* 4 ; // ну и всякое там ...
end;

procedure main1;
var
  a: Real;
begin
   a := proc(a);
end;

procedure mail2;
var
  a: Integer;
begin
   a := proc(a);
end;
...
Рейтинг: 0 / 0
24.09.2003, 15:36
    #32274343
zDIV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure proc (var a: variant)
begin
  a:= 5 ;
end;

procedure main1;
var
  a: Real;
  b: variant;
begin
   proc(b);
   a := b;
end;
...
Рейтинг: 0 / 0
24.09.2003, 16:04
    #32274395
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
Вот как раз мне это всё не подходит, вот более подробный код, может так понятней будет зачем мне это надо, если есть ошибки в тексте не обращайте внимания, пишу из головы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
procedure proc (tip,id: Integer; var a,b: variant)
var
  Query: TADOQuery;
begin
  Query:=TADOQuery.Create(nil);
  try
    Query.ConnectionString:=StringConnect;
    Query.SQL.Clear;
    case tip of
     1 :
    begin
       Query.SQL.Text:='select a,b from table1 where c= :pf0';
       Query.Parameters[ 0 ].Value:=id;
       a:=Query.FieldByName('a').AsFloat;
       b:=Query.FieldByName('b').AsFloat;
    end;
     2 :
    begin
       Query.SQL.Text:='select a,b from table2 where c= :pf0';
       Query.Parameters[ 0 ].Value:=id;
       a:=Query.FieldByName('a').AsInteger;
       b:=Query.FieldByName('b').AsInteger;
    end;
  finally
    FreeAndNil(Query);
  end;
end;

procedure main1;
var
  a,b: Real;
begin
   proc( 1 , 5 ,a,b);
end;

procedure mail2;
var
  a,b: Integer;
begin
   proc( 1 , 5 ,a,b);
end;
...
Рейтинг: 0 / 0
24.09.2003, 16:05
    #32274398
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
Забыл написать:
Код: plaintext
1.
2.
Query.Open
...
Query.Close
...
Рейтинг: 0 / 0
24.09.2003, 16:08
    #32274402
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
Блин, вот более правильно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
procedure proc (tip,id: Integer; var a,b: variant)
var
  Query: TADOQuery;
begin
  Query:=TADOQuery.Create(nil);
  try
    Query.ConnectionString:=StringConnect;
    Query.SQL.Clear;
    case tip of
     1 :
    begin
       Query.SQL.Text:='select a,b from table1 where c= :pf0';
       Query.Parameters[ 0 ].Value:=id;
       Query.Open;
       a:=Query.FieldByName('a').AsFloat;
       b:=Query.FieldByName('b').AsFloat;
       Query.Close;
    end;
     2 :
    begin
       Query.SQL.Text:='select a,b from table2 where c= :pf0';
       Query.Parameters[ 0 ].Value:=id;
       Query.Open;
       a:=Query.FieldByName('a').AsInteger;
       b:=Query.FieldByName('b').AsInteger;
       Query.Close;
    end;
  finally
    FreeAndNil(Query);
  end;
end;

procedure main1;
var
  a,b: Real;
begin
   proc( 1 , 5 ,a,b);
end;

procedure mail2;
var
  a,b: Integer;
begin
   proc( 2 , 5 ,a,b);
end;

...
Рейтинг: 0 / 0
24.09.2003, 16:10
    #32274408
GroZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
пиши так как сказал zDIV, подругому невыйдет.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure mail2;
var
  a,b: Integer;
  va,vb: variant;
begin
   proc( 1 , 5 ,va,vb);
   a := va;
   b := vb;
end;
...
Рейтинг: 0 / 0
24.09.2003, 16:12
    #32274413
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
Жаль, не люблю лишние переменные плодить.... Спасибо.... Я думал как нить без этого мона...
...
Рейтинг: 0 / 0
24.09.2003, 16:39
    #32274459
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
Мона - почему нельзя:

Код: plaintext
procedure proc (tip,id: Integer; var a,b: double


А вместо
Код: plaintext
1.
a:=Query.FieldByName('a').AsInteger;
b:=Query.FieldByName('b').AsInteger;

Сделать
Код: plaintext
1.
a:=Query.FieldByName('a').AsFloat;
b:=Query.FieldByName('b').AsFloat;


:)) Вот и все
...
Рейтинг: 0 / 0
24.09.2003, 17:33
    #32274551
AndreyBond
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
А потом после выполнения процедуры, преобразовывать в интежер? Не не катит...
...
Рейтинг: 0 / 0
24.09.2003, 18:15
    #32274616
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
Ну дык не надо преобразовывать :)

Тогда либо разные процедуры, либо передавать туда варианты
...
Рейтинг: 0 / 0
24.09.2003, 19:00
    #32274653
Hammer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
А зачем такое?
например так не катит?

procedure proc ( tip, id: Integer; var a: Variant );
begin
with TADOQuery.Create( nil );
try
ConnectionString:=StringConnect;
SQL.Clear;
SQL.Text := 'select a,b from table' + IntToStr( tip ) + ' where c= :pf0';
SQL.Text:='select a,b from table1 where c= :pf0';
Parameters[0].Value := id;
Open;
a := VarArrayOf( [ FieldByName('a').Value, FieldByName('b').Value ] );
Close;
finally
Free;
end;
end;

Ну а дальше сам разбирайся.
...
Рейтинг: 0 / 0
25.09.2003, 07:25
    #32274832
Denis Uskov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
procedure & variant
А если сделать перегрузку для процедуры? Иль не хоцешь?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / procedure & variant / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]