Autor Beitrag
chibi-chan
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 01.09.10 17:47 
Habe in Oracle eine Procedure erstellt.
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
PROCEDURE UPDATE_TABLE (p_filename IN VARCHAR2)
IS
   current_transaction_id   INT := 0;
BEGIN
   SELECT sn_tr_seq.NEXTVAL
     INTO current_transaction_id
     FROM DUAL;

   INSERT INTO sosa_tools.serial_transaction
               (transaction_id, filename, tr_date
               )
        VALUES (current_transaction_id, p_filename, SYSDATE
               );

   COMMIT;
END;

Daten aus dem ExcelFile in die Datenbank hinein schreiben und anzeigen funktioniert ganz gut.

Jedoch das Speichern von Filename in die Datenbank funktioniert leider nicht.

Bitte helft miiir! >.<

ausblenden volle Höhe Delphi-Quelltext
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:
implementation

{$R *.dfm}

procedure TfMain.FormShow(Sender: TObject);
begin
 Caption := AppVersion;
end;

procedure TfMain.Button1Click(Sender: TObject);
begin
 loadExcel('C:\Development\Tools\SerialTracker\Data\08_27082010.xlsx');
end;

procedure TfMain.FormDestroy(Sender: TObject);
begin
  if not VarIsEmpty(V) then
    V.Quit;
end;

procedure TfMain.loadExcel(FileName: String);

  var
   exit : Boolean;
   i : integer;
   test : String;
   MySettings: TformatSettings;

begin
  MySettings.DateSeparator := '.';
  MySettings.ShortDateFormat := 'dd.mm.yy';
  V := CreateOleObject('Excel.Application');
  V.Visible := True;
  V.Workbooks.Open(FileName);
  //ShowMessage(V.activeWorkbook.worksheets[1].Cells[1,1]);
  dm.qSerialTracker.Close;
  dm.qSerialTracker.Open;
  //dm.qSerialTracker.Edit;
  //dm.qSerialTracker.Insert;
  //dm.qSerialTracker.FieldByName('order_no').AsString := V.activeWorkbook.worksheets[1].Cells[i,1];

   // Dies funktioniert leider nicht..
   dm.update_table_serial.ParamByName('p_filename').AsString := ('08_27082010.xlsx');

   
//Dieser Teil funktioniert
i := 1;
   exit := False;
   repeat
     Inc(i);
     test := V.activeWorkbook.worksheets[1].Cells[i, 1];
       dm.sp_ins_sn_line.ParamByName('p_order_no').AsString := V.activeWorkbook.worksheets[1].Cells[i, 1];
       dm.sp_ins_sn_line.ParamByName('p_digit8').AsString := V.activeWorkbook.worksheets[1].Cells[i, 2];
       dm.sp_ins_sn_line.ParamByName('p_bezeichnung').AsString := V.activeWorkbook.worksheets[1].Cells[i, 3];
       dm.sp_ins_sn_line.ParamByName('p_snr').AsString := V.activeWorkbook.worksheets[1].Cells[i, 4];
       dm.sp_ins_sn_line.ParamByName('p_empfaenger').AsString := V.activeWorkbook.worksheets[1].Cells[i, 5];
       dm.sp_ins_sn_line.ParamByName('p_adresse').AsString := V.activeWorkbook.worksheets[1].Cells[i, 6];
       dm.sp_ins_sn_line.ParamByName('p_plz').AsString := V.activeWorkbook.worksheets[1].Cells[i, 7];
       dm.sp_ins_sn_line.ParamByName('p_ort').AsString := V.activeWorkbook.worksheets[1].Cells[i, 8];
       dm.sp_ins_sn_line.ParamByName('p_lieferdatum').AsDate := StrToDate(V.activeWorkbook.worksheets[1].Cells[i, 9], MySettings);
       dm.sp_ins_sn_line.Execute;
     test := V.activeWorkbook.worksheets[1].Cells[i + 11];
   until Length(test) = 0;

end;

end.

Moderiert von user profile iconNarses: SQL-Tags hinzugefügt
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
uko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220
Erhaltene Danke: 1

Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
BeitragVerfasst: Do 02.09.10 05:40 
Guten Morgen,

was genau geht denn nicht? Was ich aus den Zeilen rausles: du setzt zwar den Parameter für die Stored Procedure, führst sie aber nicht aus.
kleine Nebenbemerkung: nimm das Commit aus der SP raus. Damit zerstörst Du Dir in der Regel jegliches Fehlerhandling! Immer erst dann committen, wenn die komplette logische Transaktion beendet ist. Geht nämlich beim Einlesen der eigentlich Daten etwas schief, dann hast Du jetzt nämlich einen Kopfsatz in der DB stehen, der keine/unvollständige Daten enthält!

Grüße,
Uli
chibi-chan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 02.09.10 08:20 
Das Hineinschreiben von transaction_id, filename und tr_date in die Datenbank funktioniert nicht...
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
INSERT INTO sosa_tools.serial_transaction
               (transaction_id, filename, tr_date
               )
        VALUES (current_transaction_id, p_filename, SYSDATE
               );

wie kann ich es ausführen??

Moderiert von user profile iconNarses: SQL-Tags hinzugefügt
uko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220
Erhaltene Danke: 1

Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
BeitragVerfasst: Do 02.09.10 08:55 
das Statement ist doch in der Stored Procedure. Also führ halt die aus. Oder rufst Du die SP doch irgendwo auf und du bekommst irgendwo einen Fehler der unterdrückt wird? Wie greifst Du überhaupt von Delphi aus auf Oracle zu.
Etwas mehr Info wäre halt dann doch hilfreich! :roll:
chibi-chan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 02.09.10 09:02 
Auf die Datenbank greife ich mit OraStoredProc zu.
Das problem ist das ich keine Fehlermeldungen bekomme..
aber ich werde es ausprobieren
uko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220
Erhaltene Danke: 1

Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
BeitragVerfasst: Do 02.09.10 09:17 
Hast Du's mal mit
ausblenden Delphi-Quelltext
1:
2:
   dm.update_table_serial.ParamByName('p_filename').AsString := ('08_27082010.xlsx');
   dm.update_table_serial.Execute;

probiert?

Ansonsten: Ich rate jetzt mal: Du verwendest von DevArt die ODAC Komponenten als Zugriff, oder? Dann sollte es mit dem Execute oben gehen (eventuell noch Prepare davor aufrufen).

Uli
chibi-chan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 02.09.10 11:36 
ja natürlich!!

Vielen Dank!!

Es war wirklich ein blöder Fehler... peinlich peinlich