Entwickler-Ecke
Datenbanken - Oracle-Delphi
chibi-chan - Mi 01.09.10 17:47
Titel: Oracle-Delphi
Habe in Oracle eine Procedure erstellt.
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! >.<
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); dm.qSerialTracker.Close; dm.qSerialTracker.Open; dm.update_table_serial.ParamByName('p_filename').AsString := ('08_27082010.xlsx');
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 + 1, 1]; until Length(test) = 0;
end;
end. |
Moderiert von
Narses: SQL-Tags hinzugefügt
Moderiert von
Narses: Delphi-Tags hinzugefügt
uko - 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 - Do 02.09.10 08:20
Das Hineinschreiben von transaction_id, filename und tr_date in die Datenbank funktioniert nicht...
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
Narses: SQL-Tags hinzugefügt
uko - 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 - 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 - Do 02.09.10 09:17
Hast Du's mal mit
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 - Do 02.09.10 11:36
ja natürlich!!
Vielen Dank!!
Es war wirklich ein blöder Fehler... peinlich peinlich
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!