Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с моим классом 
:(
    Опции темы
uranpro
  Дата 25.11.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



создал свой класс для упрощения работы с компонентами TADOStoredProc, при работе возникли некоторые трудности.

юнит:
Код

unit uSimple3SP;

interface

USES db, adodb, variants;

type

TSPParams = record
  Params: array [1..20] of variant;
  Qty:integer;
  end;

 cSimple3sp = class
  public
    function execSPInsert(Params:TSPParams):boolean;
    function execSPUpdate(Params:TSPParams):boolean;
    function execSPDelete(Params:TSPParams):boolean;
    constructor Create(pSQLConnect:TADOConnection; spInsert, spUpdate,
                                        spDelete : string; TimeOut:integer);
    destructor  Destroy;
  private
    sp1,
    sp2,
    sp3: TADOStoredProc;
    SQLConnect: TADOConnection;
    function SimpleExec(var SP:TADOStoredProc; Params:TSPParams):boolean;

 end;

implementation

uses dialogs;

constructor cSimple3sp.Create(pSQLConnect:TADOConnection; spInsert, spUpdate,
                                        spDelete : string; TimeOut:integer);

  procedure SetSPParams(SP:TADOStoredProc; PN:String);
  begin
  with SP do begin
    CommandTimeout:=TimeOut;
    Connection:=pSQLConnect;
    ProcedureName:=PN+';1';
    Parameters.Refresh;
    end;
  end;

begin

if spInsert<>'' then begin

  sp1:=TADOStoredProc.Create(nil);

  SetSPParams(sp1,spInsert);

  end;

if spUpdate<>'' then begin

  sp2:=TADOStoredProc.Create(nil);

  SetSPParams(sp2,spUpdate);

  end;

if spDelete<>'' then begin

  sp3:=TADOStoredProc.Create(nil);

  SetSPParams(sp3,spDelete);

  end;

SQLConnect:=pSQLConnect;

end;

destructor cSimple3sp.Destroy;
begin
sp1.Free;
sp2.Free;
sp3.Free;
end;

function cSimple3sp.SimpleExec(VAR SP:TADOStoredProc; Params:TSPParams):boolean;
var i:integer;
begin

try

  SQLConnect.BeginTrans;

  with SP.Parameters do begin

    for i:=1 to Params.Qty do
      Items[i].Value:=Params.Params[i];

    end;

  SP.ExecProc;

  SQLConnect.CommitTrans;

  result:=true;

except

  SQLConnect.RollbackTrans;

  result:=false;

  showmessage('Повторите попытку позже.');

  end;

end;


function cSimple3sp.execSPInsert(Params:TSPParams):boolean;
begin

Result:=SimpleExec(sp1, Params);

end;

function cSimple3sp.execSPUpdate(Params:TSPParams):boolean;
begin

Result:=SimpleExec(sp2, Params);

end;

function cSimple3sp.execSPDelete(Params:TSPParams):boolean;
begin

Result:=SimpleExec(sp3, Params);

end;

end.


пример работы
Код

var c3sp:cSimple3sp;
      P:TSPParams;
begin
c3sp:=cSimple3sp.Create(GidraDM.SQLConnection,'sp_thicknessinsert',
                                              'sp_thicknessupdate',
                                              'sp_thicknessdelete',90);
...

p.Qty:=1;
  p.Params[1]:=GMsgBoxForm.eName.Text;
  if c3sp.execSPInsert(p) then qRefresh(qThickness);
...

p.Qty:=2;
  p.Params[1]:=qThicknessID.Value;
  p.Params[2]:=GMsgBoxForm.eName.Text;
  if c3sp.execSPUpdateNE(p,qThickness) then qRefresh(qThickness);
...

p.Qty:=1;
p.Params[1]:=qThicknessID.Value;

if c3sp.execSPDeleteNE(p,qThickness) then qRefresh(qThickness);
...

c3sp.free;



когда он создается несколько раз(в разных формах), то выдает ошибку на курсоре:
Код

sp1:=TADOStoredProc.Create(nil);


помогите довести до ума этот класс)


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Frees
Дата 25.11.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(uranpro @  25.11.2008,  16:16 Найти цитируемый пост)
то выдает ошибку на курсоре:

какую


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 26.11.2008, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Frees @  25.11.2008,  14:36 Найти цитируемый пост)
какую 

А ты догадайся! smile 
PM MAIL   Вверх
uranpro
Дата 27.11.2008, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



Frees, ошибку доступа


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
uranpro
Дата 27.11.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



Access violation at address 00566E4E in module 'G1DRa.exe' Write of address 00(сколько-то нулей)04.


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0705 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.