Hallo

Ein Freund von mir hat angehängte Prozedur geschrieben, welche wunderbar
mit Excel funktioniert hat. Nun wurden die Excel typischen Sachen entfernt
und dafür scalc oder soffice eingesetzt. Doch leider geht die Prozedur
jetzt nicht mehr. Wäre super wenn sich das bitte mal einer anschauen kann
der sichmit DDE aus kennt.


Vielen lieben Dank
Gruß
Marko


-- 



-- 



-- 
PROCEDURE F50_DDE_EXCEL(output_file in varchar2 := 'output.xls') IS
  appid   PLS_INTEGER;
  convid  PLS_INTEGER;
  docid   PLS_INTEGER;
  CONV_ESTABLISHED BOOLEAN := FALSE;
  zeile   number := :eingabe.ab_zeile;
  spalte  number := 0;
  v_host  varchar2(1000);

BEGIN
message('***1 ######### 2');
        -- 16.03.09
  appid := DDE.APP_BEGIN('g:\oracle8\forms6i\winopen.exe scalc.exe ', 
--||output_file,
           DDE.APP_MODE_MAXIMIZED);
  /* Öffnen einer DDE-Verbindung mit der Server-Applikation Excel */
  WHILE not CONV_ESTABLISHED LOOP
    BEGIN
      convid := DDE.INITIATE('soffice','system');
message('***2 ');
      CONV_ESTABLISHED := TRUE;
    EXCEPTION
      WHEN DDE.DMLERR_NO_CONV_ESTABLISHED THEN
        CONV_ESTABLISHED := FALSE;
    END;
  END LOOP;
        -- 16.03.09
message('***3 '||output_file);
  DDE.EXECUTE(convid, '[Save.As("' || output_file || '")]', 10000);

  /* Öffnen einer DDE-Verbindung mit der Excel-Datei */
message('***4 ');
  docid := DDE.INITIATE('soffice',output_file);
message('***5 ');
  DDE.POKE(docid,'Z1S1', '### xyz ###', DDE.CF_TEXT, 10000);
  /*Verbindungen beenden */
message('***6 ');
  DDE.TERMINATE(docid);
  DDE.TERMINATE(convid);
  --DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt

EXCEPTION
  WHEN form_trigger_failure THEN
    message(sqlerrm);
    raise form_trigger_failure;
  WHEN DDE.DDE_APP_FAILURE THEN
    message('Windows-Applikation kann nicht gestartet werden.');
    DDE.TERMINATE(docid);
    DDE.TERMINATE(convid);
    --DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
  WHEN DDE.DDE_PARAM_ERR THEN
    message('DDE wurde ein NULL-Wert übergeben.');
    DDE.TERMINATE(docid);
    DDE.TERMINATE(convid);
    --DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
  WHEN DDE.DMLERR_NO_CONV_ESTABLISHED THEN
    message('DDE kann eine Verbindung nicht einleiten.');
    DDE.TERMINATE(docid);
    DDE.TERMINATE(convid);
    --DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
  WHEN DDE.DMLERR_NOTPROCESSED THEN
    message('Fehler bei einer Transaktion aufgetaucht.');
    DDE.TERMINATE(docid);
    DDE.TERMINATE(convid);
    --DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
  WHEN OTHERS THEN
    message(sqlerrm);
    DDE.TERMINATE(docid);
    DDE.TERMINATE(convid);
    --DDE.APP_END(appid); -- auskommentiert, da Pfad über winopen.exe ermittelt
END;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Antwort per Email an