31.03.2008 12:00
Aragorn
 
Цитата:
kadr Никогда не заморачивался с этой формой, если не хватает стандартной формы, то накидывал свою на дельфях и в путь.
а вы придерживаетесь концепции OpenSource? :)
31.03.2008 12:02
kadr
 
Я придерживаюсь концепции разобрался сам расскажи другим, данный вопрос озвучивался здесь, так что в поиск
31.03.2008 12:25
Mihon
 
Польз. форма параметов должна писаться отдельно, на чем - ваше дело.
Та форма, что в Oracle Reports - показываться не будет, как ни старайся. Там мы только указываем параметры.
В настройках отчета в СМ2000 прописываешь exe-шник формы параметров, которую сам должен написать.
Есть пример на С++ в станд. примерах отчетов и всего другого.
Вся загвоздка в корректном использовании mailslot'а.
Вот пример на делфе, из своих форм на скорую руку вытащил:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  MailSlotName := GetCommandLine();
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  st:string;
  hfile:Thandle;
  ZapisanoBytes : Cardinal;
  bol,i : integer;
begin
  if VozvrBox.Checked then bol:=1 else bol:=0;
  hfile:=CreateFile( pchar(MailSlotName),GENERIC_WRITE,FILE_SHARE_READ,Nil,OPEN_EXISTING,0,0);
  st:='P_DATE='+datetostr(DateTimePicker1.DateTime)+' P_LASTDATE='+datetostr(DateTimePicker2.DateTime)+' P_StoreLoc='+inttostr(StoreID[Combobox1.ItemIndex+1])+' P_VOZVR='+inttostr(bol)+' P_GROUP_TREE='+tree;
  SetLength(st, Length(st));
  if not WriteFile(hFile,Pansichar(st)^,Length(st),ZapisanoBytes,NIL) then showmessage('Ошибка');
  CloseHandle(hFile);
  close;
end;
31.03.2008 12:38
Aragorn
 
Спасибо!
Осталось поставить себе Delphi и буду разбираться :)
осталось 2 вопроса:
1)Какие компоненты посоветуете для доступа к Oracle?
2) я так понял, поюзав поиск по форуму, что в форму параметров настройки доступа к базе не передаются и придется либо выдавать пользователю окно доступа к базе в момент запуска отчета, либо пускать под SUPERMAG?
31.03.2008 12:46
kadr
 
Цитата:
Aragorn Спасибо!
Осталось поставить себе Delphi и буду разбираться :)
осталось 2 вопроса:
1)Какие компоненты посоветуете для доступа к Oracle?
DOA, ODAC
Цитата:
Aragorn 2) я так понял, поюзав поиск по форуму, что в форму параметров настройки доступа к базе не передаются и придется либо выдавать пользователю окно доступа к базе в момент запуска отчета, либо пускать под SUPERMAG?
совершенно верно, в С+ утверждали что передачу параметров не трудно сделать, но уже 3 версии с тех пор минуло так и не сделали.
31.03.2008 12:51
Aragorn
 
Цитата:
kadr совершенно верно, в С+ утверждали что передачу параметров не трудно сделать, но уже 3 версии с тех пор минуло так и не сделали.
написал по этому поводу в поддержку, сказали, что делать это не планируется, но возможно при наличии ТЗ и оплаты с нашей стороны
:(:(:(
31.03.2008 12:59
Mihon
 
Я думаю, по поводу пользователя не будет заморочки - есть универсальный SUPERMAG или SYS.
А вот по поводу того, откуда взять имя базы - 2 варианта:
1. Т.к. форма параметров запускается из СМ, то можно брать из заголовка окна:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
  Wnd : hWnd;
  buff: ARRAY [0..255] OF Char;
  st:string;
  b:boolean;
begin
// определение имени текущей БД для коннекта
  magbase:='';
  Wnd := GetWindow(Handle, gw_HWndFirst);
  WHILE Wnd <> 0 DO
  BEGIN {Не показываем:}
    IF (Wnd <> Application.Handle) AND {-Собственное окно}
    IsWindowVisible(Wnd) AND {-Невидимые окна}
    (GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
    (GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
    THEN
    BEGIN
      GetWindowText(Wnd, buff, sizeof(buff));
      st:=StrPas(buff);
      if copy(st,1,8)='Супермаг' then
      begin
        for i:=8 to length(st) do
        begin
          if st[i]='@' then b:=true;
          if st[i]=' ' then b:=false;
          if b=true then magbase:=magbase+st[i];
        end;
        break;
      end;
    END;
    Wnd := GetWindow(Wnd, gw_hWndNext);
  END;
  magbase:=copy(magbase,2,length(magbase)-1);
  OracleSession1.LogonDatabase:=magbase;
//еще указываем имя польз. и пароль
  OracleSession1.Connected:=true;
end;
2 вариант:
В реестре хранится название БД, в которую заходили последний раз:
Код:
//  В Uses дописываем Registry;
// в var -   Registry: TRegistry;

  Registry:=TRegistry.Create;
  Registry.RootKey:=HKEY_CURRENT_USER;
  Registry.OpenKeyReadOnly('SOFTWARE');
  Registry.OpenKeyReadOnly('Service Plus');
  Registry.OpenKeyReadOnly('SuperMag2000');
  Registry.OpenKeyReadOnly('Супермаг 2000');
  Registry.OpenKeyReadOnly('LastLogin');
  magbase:=Registry.ReadString('Database');
  Registry.Free;
31.03.2008 13:14
kadr
 
Цитата:
Mihon Я думаю, по поводу пользователя не будет заморочки - есть универсальный SUPERMAG или SYS.
А ещё можно пароли этих пользователей на стеночке повесить.
Права пользователю должны быть даны только те которые ему необходимы, всё остальное он не должен иметь даже случайно сделать.
31.03.2008 13:36
Mihon
 
Цитата:
kadr А ещё можно пароли этих пользователей на стеночке повесить.
Права пользователю должны быть даны только те которые ему необходимы, всё остальное он не должен иметь даже случайно сделать.
Пользователь, по сути, не знает о существовании таких пользователей.
А он и не сможет "случайно сделать".
Пользователь что, кульный хацкер, перехватит соединение прикладной программы и ужасные запросы будет слать? Ничего страшного, если от SUPERMAG'а прога приконнектится.

p/s/ у нас 1,5 года операторы от имени этого пользователя Расчет ТД делали, сейчас мы SUPERMAG-у пароль поменяли, нового сделали, а то они себе права раздавать научились. А так проблем не было. Вот.
31.03.2008 14:07
kadr
 
Один раз встретились с проблемой и не взяли на заметку?
А пользователей не надо недооценивать.
Но это уже разговоры за безопасность, так что в этой теме развитие этого вопроса будет оффтоп.
Часовой пояс GMT +3, время: 13:36.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.