Autor |
Beitrag |
chibi-chan
Hält's aus hier
Beiträge: 8
|
Verfasst: Mi 01.09.10 17:47
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! >.<
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
Beiträge: 220
Erhaltene Danke: 1
Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
|
Verfasst: 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
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
Beiträge: 220
Erhaltene Danke: 1
Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
|
Verfasst: 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!
|
|
chibi-chan
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
Beiträge: 220
Erhaltene Danke: 1
Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
|
Verfasst: 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
Hält's aus hier
Beiträge: 8
|
Verfasst: Do 02.09.10 11:36
ja natürlich!!
Vielen Dank!!
Es war wirklich ein blöder Fehler... peinlich peinlich
|
|