powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обмен данными между своими процессами
25 сообщений из 109, страница 3 из 5
Обмен данными между своими процессами
    #39616894
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbdefecator,
использую DOA + instantclient - в обычных оконных приложениях работает хорошо. Проблемы на x64 появились. FireDAC работает еще медленнее. Попробую на ODAC потестить, может быть не будет таких проблем.

Я бы посоветовал профилировщик, а не гадание.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616896
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbДегтярев Евгений, СУБД прекрасно поживает. Запрос выполняется за 3-6 сек , а подготовка запроса (работа DOA) может доходить до 10 мин в пиковые нагрузки. Это сумашествие

вот это вот, что я выделил, и есть самое большое сумасшествие
особенно если у тея настолько нагруженная система, как ты пишешь
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616926
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi, профилировщик указывает на конкретную процедуру
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616929
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, кстати без OCI ODAC в моем случае работать не будет. Я передаю в качестве параметров 8 массивов по 150 000 элементов
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616936
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

открой тайну, что за данные такие?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616958
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгенийоткрой тайну, что за данные такие?
иконки попиксельно?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617075
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, кстати без OCI ODAC в моем случае работать не будет. Я передаю в качестве параметров 8 массивов по 150 000 элементов
ну что я могу сказать.
ты не на своём месте
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617200
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, ага
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617225
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, посмотрел не туда. при Direct mode нет поддержки PLSQL tables, а не ассоциативных массивов. Но не беда. При присвоении
Variant массивов очень много памяти жрется, но это не точно, я с ODAC не работал, буду копаться
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617248
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, посмотрел не туда. при Direct mode нет поддержки PLSQL tables, а не ассоциативных массивов. Но не беда. При присвоении
Variant массивов очень много памяти жрется, но это не точно, я с ODAC не работал, буду копаться

Direct Mode в ODAC работает медленнее, чем работа через клиента оракла
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617254
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbschi, профилировщик указывает на конкретную процедуру
код процедуры то этой есть?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617284
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений,

Код: pascal
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.
 type
  TobPack = class (Tobject)
    m1: Variant;
    m2: Variant;
    m3: Variant;
    m4: Variant;
    m5: Variant;
    m6:Variant;
    m7: Variant;
    m8: Variant;
    cnt_pack: integer;
    constructor Create(const dbSize: integer); overload;
    destructor Destroy; override;
  end;

constructor TobPack.create(const dbSize: integer);
begin
  inherited Create;
  try
    m1 := VarArrayCreate([0, dbSize-1], varOleStr);
    m2 := VarArrayCreate([0, dbSize-1], varOleStr);
    m3:= VarArrayCreate([0, dbSize-1], varOleStr);
    m4:= VarArrayCreate([0, dbSize-1], varInteger);
    m5:= VarArrayCreate([0, dbSize-1], varInteger);
    m6:= VarArrayCreate([0, dbSize-1], varInteger);
    m7:= VarArrayCreate([0, dbSize-1], varDate);
    m8:= VarArrayCreate([0, dbSize-1], varDate);
  except
    on e : Exception do
    WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' (!ОШИБКА) TobPack.create '+' Ошибка:'+e.Message);
  end;
end;

destructor TobPack.Destroy;
begin
  m1 := null;
  m2 := null;
  m3:= null;
  m4:= null;
  m5:= null;
  m6:= null;
  m7:= Null;
  m8:= Null;

  inherited;
end;




При инициализации

Код: pascal
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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
err:= False;

  try
    oraSession := TOracleSession.Create(nil);
    oraSession.LogonUsername := AUser;
    oraSession.LogonPassword := APasswd;
    oraSession.LogonDatabase := AConnectionString;
    oraSession.ThreadSafe := True;
    oraSession.StatementCache:= True;
    oraSession.Preferences.ConvertCRLF:= false;
    oraSession.Preferences.TrimStringFields:= false;
  except
    on E: exception do
    begin
      err := True;
      errMessage := E.Message;
      WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) +' - (!ОШИБКА) процедура создания oraSession. Поток записи в БД №' + inttostr(Fnum) + '. '  + E.Message);
    end;
  end;

  if err = false then
  begin
    try
      oraSession.LogOn;
    except
      on E: exception do
      begin
        err := True;
        errMessage := E.Message;
        WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) +' - (!ОШИБКА) процедура oraSession.LogOn. Поток записи в БД №' + inttostr(Fnum) + '. ' + E.Message);
      end;
    end;


    if err = false then
    begin
      try
        ods:= TOracleQuery.create(nil);
        ods.Tag:= Fnum;
          with ods do
          begin
             Session:= oraSession;
             DeleteVariables;
             sql.Text:='begin' + #13#10 +
                       '               proc(m1 => :m1,' + #13#10 +
                       '                       m2 => :m2,' + #13#10 +
                       '                       m3 => :m3,' + #13#10 +
                       '                       m4 => :m4,' + #13#10 +
                       '                       m5 => :m5,' + #13#10 +
                       '                       m6 => :m6,' + #13#10 +
                       '                       m7 => :m7,' + #13#10 +
                       '                       m8 => :m8,' + #13#10 +
                       '                       v_cnt => :v_cnt);' + #13#10 +
                       'end;';

             DeclareVariable('m1', otDate);
             DimPLSQLTable('m1', size_pack, 0);
             DeclareVariable('m2', otDate);
             DimPLSQLTable('m2', size_pack, 0);
             DeclareVariable('m3', otString);
             DimPLSQLTable('m3', size_pack, 10);
             DeclareVariable('m4', otString);
             DimPLSQLTable('m4', size_pack, 10);
             DeclareVariable('m5', otString);
             DimPLSQLTable('m5', size_pack, 10);
             DeclareVariable('m6', otInteger);
             DimPLSQLTable('m6', size_pack, 0);
             DeclareVariable('m7', otInteger);
             DimPLSQLTable('m7', size_pack, 0);
             DeclareVariable('m8', otInteger);
             DimPLSQLTable('m8', size_pack, 0);
             DeclareVariable('v_cnt', otInteger);
             Optimize:= True; //не будет пересобирать заново запрос
          end;

      except
        on E: exception do
        begin
          errMessage:= e.Message;
          WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' - (!ОШИБКА) процедура создания Query. Поток записи в БД №'+inttostr(fnum)+'.'+#13#10+e.Message);
        end;
      end;

      err_Execute:= False;
    end;
  end;

  if err then  //ошибка при инициализации
  begin
    WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) + ' - (!ОШИБКА) Инициализация потока записи в БД №' + inttostr(fnum) + '. Служба будет перезапущена');
    CSectionErrDB.Enter;
    TRY
      err_conn_db:= 1;
    FINALLY
      CSectionErrDB.Leave;
    END;
  end;



В Execute потока:

try

fStartNew:= GetTickCount;
ods.SetVariable(0, obPack.m1);
ods.SetVariable(1, obPack.m2);
ods.SetVariable(2, obPack.m3);
ods.SetVariable(3, obPack.m4);
ods.SetVariable(4, obPack.m5);
ods.SetVariable(5, obPack.m6);
ods.SetVariable(6, obPack.m7);
ods.SetVariable(7, obPack.m8);
ods.SetVariable(8, obPack.cnt_pack);

buf_set:= inttostr(GetTickCount - fStartNew);

fStartNew:= GetTickCount;

try
EOracle:= 0;
ods.Execute;
err_Execute:= False;
except
on E: EOracleError do
begin
EOracle:= E.ErrorCode;
end;

on E: Exception do
begin

WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' (!ОШИБКА) Модуль записи в БД. Выполнение запроса. Поток №'+inttostr(fnum)+' '+e.Message);
err_Execute:= True;
end;
end;
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617289
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что, профилировщик прямо на весь этот горький катаклизм указывает ?

Не верю.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617295
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi, на этот

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
fStartNew:= GetTickCount; 
ods.SetVariable(0, obPack.m1);
ods.SetVariable(1, obPack.m2);
ods.SetVariable(2, obPack.m3);
ods.SetVariable(3, obPack.m4);
ods.SetVariable(4, obPack.m5);
ods.SetVariable(5, obPack.m6);
ods.SetVariable(6, obPack.m7);
ods.SetVariable(7, obPack.m8);
ods.SetVariable(8, obPack.cnt_pack);

buf_set:= inttostr(GetTickCount - fStartNew);
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617319
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если использовать ODAC

Код: pascal
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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
try
    oraSession := TOraSession.Create(nil);
    oraSession.ConnectPrompt := False;
    oraSession.Options.Direct:= True;
    oraSession.ConnectString := 'Direct=True;Home Name=InstantClient1;Host=201.0.10.15;SID=orcl;User ID=user1;Password=pass;Login Prompt=False';
    oraSession.AutoCommit:= False;
    oraSession.ThreadSafety := True;
    oraSession.ConvertEOL:= False;
  except
    on E: exception do
    begin
      err := True;
      errMessage := E.Message;
      WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) +' - (!ОШИБКА) процедура создания oraSession. Поток записи в БД №' + inttostr(Fnum) + '. '  + E.Message);
    end;
  end;

  if err = false then
  begin
    try
      oraSession.Connect;
    except
      on E: exception do
      begin
        err := True;
        errMessage := E.Message;
        WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) +' - (!ОШИБКА) процедура oraSession.LogOn. Поток записи в БД №' + inttostr(Fnum) + '. ' + E.Message);
      end;
    end;


    if err = false then
    begin
      try
        Q:= TOraSQL.Create(nil);
        Q.Session:= oraSession;
        Q.Params.Clear;
        Q.SQL.Text:= 'begin' + #13#10 +
                       '  pkg_nat.ins_pack_buf(m1 => :m1,' + #13#10 +
                       '                       m2 => :m2,' + #13#10 +
                       '                       m3 => :m3,' + #13#10 +
                       '                       m4 => :m4,' + #13#10 +
                       '                       m5 => :m5,' + #13#10 +
                       '                       m6 => :m6,' + #13#10 +
                       '                       m7 => :m7,' + #13#10 +
                       '                       m8 => :m8,' + #13#10 +
                       '                       v_cnt => :v_cnt);' + #13#10 +
                       'end;';
        Q.ParamByName('m1').DataType:= ftDateTime;
        Q.ParamByName('m1').ParamType:= ptInput;
        Q.ParamByName('m1').Table:= True;
        Q.ParamByName('m1').Length:= size_pack;

        Q.ParamByName('m2').DataType:= ftDateTime;
        Q.ParamByName('m2').ParamType:= ptInput;
        Q.ParamByName('m2').Table:= True;
        Q.ParamByName('m2').Length:= size_pack;

        Q.ParamByName('m3').DataType:= ftString;
        Q.ParamByName('m3').ParamType:= ptInput;
        Q.ParamByName('m3').Table:= True;
        Q.ParamByName('m3').Length:= size_pack;

        Q.ParamByName('m4').DataType:= ftString;
        Q.ParamByName('m4').ParamType:= ptInput;
        Q.ParamByName('m4').Table:= True;
        Q.ParamByName('m4').Length:= size_pack;

        Q.ParamByName('m5').DataType:= ftString;
        Q.ParamByName('m5').ParamType:= ptInput;
        Q.ParamByName('m5').Table:= True;
        Q.ParamByName('m5').Length:= size_pack;

        Q.ParamByName('m6').DataType:= ftInteger;
        Q.ParamByName('m6').ParamType:= ptInput;
        Q.ParamByName('m6').Table:= True;
        Q.ParamByName('m6').Length:= size_pack;

        Q.ParamByName('m7').DataType:= ftInteger;
        Q.ParamByName('m7').ParamType:= ptInput;
        Q.ParamByName('m7').Table:= True;
        Q.ParamByName('m7').Length:= size_pack;

        Q.ParamByName('m8').DataType:= ftInteger;
        Q.ParamByName('m8').ParamType:= ptInput;
        Q.ParamByName('m8').Table:= True;
        Q.ParamByName('m8').Length:= size_pack;

        Q.ParamByName('v_cnt').DataType:= ftInteger;
        Q.ParamByName('v_cnt').ParamType:= ptInput;
        Q.ParamByName('v_cnt').Table:= False;

        Q.Prepare;
      except
        on E: exception do
        begin
          errMessage:= e.Message;
          WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' - (!ОШИБКА) процедура создания Query. Поток записи в БД №'+inttostr(fnum)+'.'+#13#10+e.Message);
        end;
      end;

      err_Execute:= False;
    end;
  end;

  if err then  //ошибка при инициализации
  begin
    WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) + ' - (!ОШИБКА) Инициализация потока записи в БД №' + inttostr(fnum) + '. Служба будет перезапущена');
    CSectionErrDB.Enter;
    TRY
      err_conn_db:= 1;
    FINALLY
      CSectionErrDB.Leave;
    END;
  end;




Код: pascal
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.
fStartNew:= GetTickCount;
                Q.Params[0].Value:= obPack.m1;
                Q.Params[1].Value:= obPack.m2;
                Q.Params[2].Value:= obPack.m3;
                Q.Params[3].Value:= obPack.m4;
                Q.Params[4].Value:= obPack.m5;
                Q.Params[5].Value:= obPack.m6;
                Q.Params[6].Value:= obPack.m7;
                Q.Params[7].Value:= obPack.m8;
                Q.Params[8].AsInteger:= obPack.cnt_pack;

                buf_set:= inttostr(GetTickCount - fStartNew);
                if (FLogType = 4)  then  WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' - (!ИНФ) Модуль записи в БД. Сделали SetVariable. 3 этап. Поток №:'+inttostr(fnum));

                fStartNew:= GetTickCount;

                try
                  EOracle:= 0;
                  Q.Execute;
                  err_Execute:= False;
                except
                  on E: exception do
                  begin
                    WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' (!ОШИБКА) Модуль записи в БД. Выполнение запроса. Поток №'+inttostr(fnum)+' '+e.Message);
                    err_Execute:= True;
                  end;
                end;



на методе Execute происходит прирост ОЗУ памяти с 1,5 ГБ до 3,8 и вылетает с ошибкой ORA-03113: end-of-file on communication
это при Direct mode, при Client mode еще не пробовал
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617333
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8 массивов по 150к элементов - не хило так
не пробовал передавать в запрос пачки по меньше
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617340
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений, пробовал, но не подходит, начинает копиться очередь, мне бы 500 000 поставить - лучше бы было другим потокам, но тогда вообще тормоза с DOA
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617354
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
постоянно такой поток или это на пиках?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617357
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений, постоянно, на пиках больше в несколько раз, но между пиками есть время успеть разобрать накопленное
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617372
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Код: pascal
1.
2.
 'Петя' + #13#10 + 'Коля'
 'Петя'#13#10'Коля'



:)
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617378
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Данная задача по скорости не может быть решена в принципе с используемым инструментарием.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617386
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, печалька
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617391
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, печалька
сваливай данные для загрузки в базу в файлы
а отдельный процесс или поток пусть неспешно файлы читает, заносит данные в БД, и удаляет файл
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617392
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, так код автоматом из PL/SQL Developer'а генерится)
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617396
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbчччД, так код автоматом из PL/SQL Developer'а генерится)
при использовании ODAC вот это всё говнище:
Код: pascal
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.
        Q.ParamByName('m1').DataType:= ftDateTime;
        Q.ParamByName('m1').ParamType:= ptInput;
        Q.ParamByName('m1').Table:= True;
        Q.ParamByName('m1').Length:= size_pack;

        Q.ParamByName('m2').DataType:= ftDateTime;
        Q.ParamByName('m2').ParamType:= ptInput;
        Q.ParamByName('m2').Table:= True;
        Q.ParamByName('m2').Length:= size_pack;

        Q.ParamByName('m3').DataType:= ftString;
        Q.ParamByName('m3').ParamType:= ptInput;
        Q.ParamByName('m3').Table:= True;
        Q.ParamByName('m3').Length:= size_pack;

        Q.ParamByName('m4').DataType:= ftString;
        Q.ParamByName('m4').ParamType:= ptInput;
        Q.ParamByName('m4').Table:= True;
        Q.ParamByName('m4').Length:= size_pack;

        Q.ParamByName('m5').DataType:= ftString;
        Q.ParamByName('m5').ParamType:= ptInput;
        Q.ParamByName('m5').Table:= True;
        Q.ParamByName('m5').Length:= size_pack;

        Q.ParamByName('m6').DataType:= ftInteger;
        Q.ParamByName('m6').ParamType:= ptInput;
        Q.ParamByName('m6').Table:= True;
        Q.ParamByName('m6').Length:= size_pack;

        Q.ParamByName('m7').DataType:= ftInteger;
        Q.ParamByName('m7').ParamType:= ptInput;
        Q.ParamByName('m7').Table:= True;
        Q.ParamByName('m7').Length:= size_pack;

        Q.ParamByName('m8').DataType:= ftInteger;
        Q.ParamByName('m8').ParamType:= ptInput;
        Q.ParamByName('m8').Table:= True;
        Q.ParamByName('m8').Length:= size_pack;

        Q.ParamByName('v_cnt').DataType:= ftInteger;
        Q.ParamByName('v_cnt').ParamType:= ptInput;
        Q.ParamByName('v_cnt').Table:= False;


писать руками не надо от слова совсем.
...
Рейтинг: 0 / 0
25 сообщений из 109, страница 3 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обмен данными между своими процессами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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