Zum Inhalt springen

DJTank

Mitglieder
  • Gesamte Inhalte

    59
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von DJTank

  1. Das Problem mit dem Zahlenformat hat sich erledigt (war ein Fehler, den der damalige Entwickler in einer Kalkulation eingebaut hat ). Hoffentlich finden wir auch noch eine Lösung für das Insert/Update-Problem. Danke vielmals für die große Hilfe Stefan
  2. Dankeschön, ich hatte die Lösung dann auch noch im Internet gefunden, was aber gar nicht sooo einfach war
  3. Hallo Leute, nochmal ich. Unser Migrationsprojekt, welches auch in einem der anderen aktuelle Threads hier von mir angesprochen wurde, ist bisher immer auf Oracle9 getestet worden. Im Hause haben wir aber noch die 8er Version und können noch nicht auf 10 umsteigen bzw. wollen nicht mehr auf 9 gehen, weil das keinen Sinn hätte. Jetzt haben wir immer auf der 9er Version getestet und alles funktioniere zu unserer Zufriedenheit. Bei der Migration zur Version 8 (welche sehr bald im Betrieb laufen sollte), konnte ich jedoch folgenden View nicht mehr erstellen, da die Aktion immer mit einer Fehlermeldung endet: "ORA-00933: SQL-Befehl wurde nicht korrekt beendet" Betroffen ist folgende Abfrage, welche ich gerne als View abgespeichert hätte: SELECT DISTINCT t_zeile.PRONR1,t_art_art.art_Anzeige AS art_art FROM HACOS.t_zeile JOIN HACOS.t_art_art ON t_zeile.ART_ART = t_art_art.art_art Was ist daran falsch? Wie gesagt, es handelt sich um Oracle Version 8 und in Version 9.2 ging das ganze noch. Danke schonmal! lg Stefan EDIT: Der Fehler tritt immer nach dem Schlüsselwort "JOIN" auf
  4. Der Zugriff erfolgt immer in Access über verknüpfte ODBC-Tabellen, wie du es angenommen hast. Weiters hast du auch damit recht, dass die Access-DB kurzfristig aufgelöst werde soll (das BE) -> wird ja auf Oracle umgestellt und die Zeit drängt. Wir haben es fast geschafft bis auf 2-3 "dubiose" Sachen, u.a. diese zwei Probleme, die ich in diesem Thread angesprochen habe.
  5. Genau richtig, der Zugriff erfolgt über verknüpfte Tabellen via ODBC. Die Daten sind korrekt, auch wenn ich die Tabellen in Access anzeigen lasse. Da fällt mir noch was ein...grade so nebenbei...ich habe auch das Problem, dass unsere Anwendung in manchen Tabellen keine Insert und Updates machen kann. Wenn ich diese jedoch direkt im Oracle einfüge oder update, dann gehts ohne Probleme. Datenbanken sind oft schon zum Verzweifeln
  6. Das Problem entsteht bei der Ausgabe. Die Daten wurden völlig korrekt übernommen.
  7. Ich habe in der Testumgebung 9i (9.2). Jetzt hab ich mal zum Testen die Sache mit "alter session" ausprobier, aber das bringt in meiner Anwendung leider gar keinen Effekt...Möglicherweise war der Ansatz von mir völlig falsch, was meinst?
  8. Danke schonmal für den Hinweis Ich habe die Registry-Settings nun auf meinem Testserver- bzw. Client überprüft und sehe nur Einträge, welche auf "Deutsch" stehen. Wenn ich jedoch die Parameter via SQLPLUS überprüfe bekomme ich folgendes Ergebnis: Hmmm...wie stelle ich das jetzt wirklich auf Deutsch?
  9. Jap, hat natürlich number. prec: 11 scale: 0 Würde auch passen, wird in Gramm eingegeben und ist eine Ganzzahl.
  10. btw...das soll natürlich 23Tausend heißen...
  11. Hey Leute, ich habe grade ein Problem, welches sehr stark nach amerikanischem Zahlenformat riecht. Wir haben ein Access FE mit Access BE, welches nun nach Oracle migriert wurde. In einem bestimmten Feld in der DB steht der Wert 223720. Dieser stellt ein Gewicht in Gramm dar. Nun haben wir eine Ausgabe im FE, welche den Wert dieses Feldes durch 1000 dividiert, damit wir Kilogramm erhalten. Es ist eingestellt, dass 2 Nachkommastellen angezeigt werden. Nun sieht die Ausgabe folgendermaßen aus: Access-BE: 223,72 Oracle-BE: 22.372,00 Habe ich recht, dass in Oracle irgendwie ein Fremdformat eingestellt ist? Weil so sieht das für unsere Anwender ja aus, als hätte das Produkt 223Tausend Kilogramm Wenn ja, wo stelle ich das Format um? Dankeschön für eure Hilfe. lg Stefan
  12. Public Function f_proSpeichern(ByVal strPronrOK As String, ByVal VarZuteilenAct As Long, Optional ByVal bolFree As Boolean) As String '-------------------------------------------------------------- '################Legt vorhandenen Daten ab#########' Dim rs As Recordset, rs1 As Recordset Dim Erg_VWzuVP As String Dim VP_Mont As String Dim Rabatte As Long Dim hlpRabatte As Long Dim Help As String, Help1 As String Dim sngFaktorLif As String, sngFaktorKnd As String ' On Error GoTo Fehler ' '***Unwesentlicher Code With Forms!f_pro If Nz(.preisliste, conSpace0) = conSpace0 Then .preisliste = pubStdPreisliste 'NULL abfangen ' Call f_proAkt 'Formular f_pro aktualisieren ' If Nz(strPronrOK, conSpace0) <> conSpace0 Then '--- preis definieren, Montageauftrag oder nicht... zProTyp = Mid(strPronrOK, OrderLen1 + OrderLen2, OrderLen2) 'Klassen-typ wird der klassen-variablen zProTyp übergeben If (aryProArt(zProTyp).MONAUFTRAG = True Or aryProArt(zProTyp).SerAuftrag = True) Then 'denn dann ist es ein montageauftrag! If Nz(.tfS_preis, conSpace0) = conSpace0 Then .tfS_preis = AufXStellenRunden(.tfWWert, conRund2) Else .tfS_preis = AufXStellenRunden(.tfS_preis_org, conRund2) End If '--- '*********daten für t_pro, t_pro1, t_pro2 und t_rek laden ********' [B]Set rs = CurrDataBase.OpenRecordset("SELECT TOP 1 id_knd,id_asp,id_lad,mwst,zelle,name_ver,bestnr_knd,benennung,Name,status,dat_warn,dat,dat_sort,lif_dat,w_wert,gesperrt,zuordnung,zuordnung_anz,Preisgruppencode,Import,p_wert,dat_best,dat_stat,dat_an,geschäftsbuchungsgrp,name_mon,t_pro1.memo,za_ko,lif_ko,vers_art,vers_kosten,lif_kosten,lif_text,vers_text,KleinMengenZuschlag,terminSAT,TerminKBZ,TerminMSM,terminKLT,rech_gut,dat_von,t_rek.memo AS MemoR,t_rek.art FROM ((t_pro LEFT JOIN t_pro1 ON t_pro.pronr1 = t_pro1.pronr1) LEFT JOIN t_pro2 ON t_pro.pronr1 = t_pro2.pronr1) LEFT JOIN t_rek ON t_pro.pronr1 = t_rek.pronr1 WHERE t_pro.pronr1 = '" + strPronrOK + "'")[/B] ' If Not (rs.BOF And rs.EOF) Then [B]rs.Edit[/B] Rabatte = 0 ' If (aryProArt(zProTyp).MONAUFTRAG = True Or aryProArt(zProTyp).SerAuftrag = True) Then '--------------- sngFaktorLif = getWert("t_preisliste_init", "code", .preisliste, "Faktor") 'Umrechnungsfaktor für Montageauftrag If sngFaktorLif = conError Then sngFaktorLif = getWert("t_preisliste_init", "code", pubStdPreisliste, "Faktor") If Nz(.tfZuordnung, conSpace0) = conSpace0 Then VP_Mont = Nz(.tfS_preis, 0) 'Verkaufspreis aus Montageauftrag sngFaktorKnd = sngFaktorLif 'Umrechnungsfaktor ist hier immer = 1 Else 'Verkaufspreis aus Kundenauftrag Set rs1 = CurrDataBase.OpenRecordset("SELECT TOP 1 preis, rabatt, wrgp FROM t_zeile WHERE pronr1 = '" + Nz(.tfZuordnung, conSpace0) + "' AND best_nr = '" + strPronrOK + "'", dbOpenForwardOnly) If rs1.BOF And rs1.EOF Then VP_Mont = Nz(.tfS_preis, 0) 'Verkaufspreis aus Montageauftrag, da keinen Verkaufspreis gefunden sngFaktorKnd = sngFaktorLif 'Umrechnungsfaktor ist hier immer = 1 Else VP_Mont = rs1(0) * (100 - rs1(1)) / 100 'Verkaufspreis gefunden* sngFaktorLif / sngFaktorKnd sngFaktorKnd = getWert("t_pro", "pronr1", .tfZuordnung, "Preisgruppencode") 'Preisliste aus Kundenauftrag sngFaktorKnd = getWert("t_preisliste_init", "code", sngFaktorKnd, "Faktor") 'Umrechnungsfaktor für Kundenauftrag 'Rabatt aus der Rabattzeile holen --> aktuell gültiger Rabatt wird verwendet Help = getWert("t_pro", "pronr1", .tfZuordnung, "id_knd") 'Kundennummer aus Kundenauftrag Help = getWert("a_pass_knd", "id_knd", Help, "rabatt_txt") 'Rabattzeile des Kunden laden Help1 = Nz(getWertExact("t_ra_pv", "knd", Help, "art", rs1(2), "rabatt"), 0) 'Rabatt laden ( in % ) Rabatte = IIf(Help1 = conError, 0, Help1) End If Set rs1 = Nothing End If VP_Mont = VP_Mont * sngFaktorKnd / sngFaktorLif 'mit Umrechnungsfaktor '--------------- Erg_VWzuVP = f_VWzuVP(Nz(.tfWWert, 0), Nz(VP_Mont, 0), Rabatte, hlpRabatte) ' -15% ? If Erg_VWzuVP = conError And strClose = conSpace0 Then Call MsgBoxLang(15, str(hlpRabatte)) End If '*********Wurde der Verkaufswert verändert? - nur bei Montageaufträgen ********' If rs!W_Wert <> Nz(.tfWWert, 0) Then If Nz(rs!p_wert, 0) = Nz(.tfS_preis, 0) And strClose = conSpace0 Then 'Verkaufspreis prüfen Call MsgBoxLang(8, strPronrOK) End If End If End If '---- 'Soll die Übersicht aller Aufträge aktualisiert werden ? If Nz(rs!status, 0) <> Nz(.kfStatus, 0) Or Nz(rs!bestnr_knd, conSpace0) <> Left(Nz(.tfBestKnd, conSpace0), rs!bestnr_knd.Size) Or Nz(rs!lif_dat, conSpace0) <> Nz(.tfLifDat, conSpace0) Then Forms!f_haupt.RecordSource = conSpace0 End If '---- 'Registerblatt Kunde rs!id_knd = IIf(Nz(.kfKunde, conSpace0) = conSpace0, Nz(rs!id_knd, conSpace0), Nz(.kfKunde, conSpace0)) rs!id_asp = Nz(.kfAsp, conSpace0) rs!id_lad = Nz(.tfIdAsp, conSpace0) 'Registerblatt Allgemein Rabatte = Nz(.tfMwst, 0) rs!mwst = Nz(.tfMwst, 0) rs!ZELLE = Nz(.tfZelle, 0) rs!name_ver = Nz(.tfVerNeu, conSpace0) rs!bestnr_knd = Left(Nz(.tfBestKnd, conSpace0), rs!bestnr_knd.Size) rs!benennung = Left(Nz(.tfBenennung, conSpace0), rs!benennung.Size) rs!NAME = Nz(.tfName, conSpace0) rs!status = Nz(.kfStatus, 0) rs!dat_warn = .tfWarnDat If IsNull(rs!dat) Then rs!dat = Date rs!dat_sort = Now rs!lif_dat = .tfLifDat On Error Resume Next rs!W_Wert = 0 rs!W_Wert = Nz(.tfWWert, 0) 'Dieser Code verursacht zeitweise einen Fehler On Error GoTo Fehler rs!GESPERRT = IIf(bolFree = False, rs!GESPERRT, False) 'bolfree = false (ist Standardwert) rs!zuordnung = Nz(.tfZuordnung, conSpace0) rs!zuordnung_anz = Nz(.tfZuordnungAnz, 1) rs!Preisgruppencode = IIf(Nz(.preisliste, conSpace0) = conSpace0, Nz(rs!Preisgruppencode, conSpace0), Nz(.preisliste, conSpace0)) rs!import = Nz(.opImport, 1) '--- der folgende eintrag wird, falls der auftrag eine Aufgabe ist weiter unten überschieben! rs!p_wert = Nz(.tfS_preis, 0) ' '*********daten für t_pro1********' rs!dat_best = .tfBestDat rs!dat_stat = .tfStatDat rs!dat_an = .tfAnDat rs!geschäftsbuchungsgrp = IIf(Nz(.tfGeschäftsbuchgrp, conSpace0) = conSpace0, Nz(rs!geschäftsbuchungsgrp, conSpace0), Nz(.tfGeschäftsbuchgrp, conSpace0)) rs!name_mon = Nz(.tfMonteur, conSpace0) rs!memo = .farbstat rs!za_ko = Nz(.kfzak1, conSpace0) rs!lif_ko = Nz(.kflifko1, conSpace0) rs!vers_art = Nz(.kfvers1, conSpace0) rs!vers_kosten = Nz(.tfVers1, 0) rs!lif_kosten = Nz(.tflifko1, 0) rs!lif_text = Nz(.tflifko2, conSpace0) rs!vers_text = Nz(.tfvers2, conSpace0) rs!Kleinmengenzuschlag = Nz(.tfKleinmengenzuschlag, 0) ' '***********daten für t_pro2**********' rs!terminSAT = .tfDatSAT rs!TerminKBZ = .tfDatKBZ rs!TerminMSM = .tfDatMSM rs!terminKLT = .tfDatKLT rs!rech_gut = IIf(Nz(.ogRechnung, conSpace0) = conSpace0, Nz(rs!rech_gut, 1), Nz(.ogRechnung, 1)) '*****************reklamations ablage, wenn notwendig***********' 'Allgemeine Info: im falle einer zweiten rekl. wird der reklamationsbeginn nicht gelöscht, 'das rek-ende aber schon, was bedeutet, die reklamationsdauer zählt von beginn der ersten 'reklamation bis ende der letzten...! If .kkRek = True Then If IsNull(rs!dat_von) Then rs!dat_von = Date rs!memoR = Nz(.rek_tx, conSpace0) rs!art = Nz(.rek_art, conSpace0) End If ' [B]rs.Update[/B] Else If strClose <> "close" Then Call MsgBoxLang(137) End If ' Ausgang: On Error Resume Next strCurrentAction = conSpace0 Set rs = Nothing Set rs1 = Nothing End With Exit Function Fehler: If Nz(Err.Description, conSpace0) = conSpace0 Or Err.Number = 0 Then Call ErrorLog(strUserIdent, 815815, "Order: " + strCurrentAction, "m_funktionen / f_proSpeichern", , True) Else Call ErrorLog(strUserIdent, Err.Number, Err.Description, "m_funktionen / f_proSpeichern", , True) End If On Error Resume Next Resume Next End Function Hab mal den RS, das RS.Edit und das RS.Update fett gemacht. Hier noch die Pass-Through-Abfrage: SELECT t_pro.DAT, t_pro.LIF_DAT, t_pro.PRONR1, t_pro.STATUS, t_pro.NAME_KND, t_pro.BESTNR_KND, t_pro.ID_KND, t_pronr_art.ART_ART FROM HACOS.t_pro LEFT OUTER JOIN HACOS.t_pronr_art ON t_pro.PRONR1 = t_pronr_art.PRONR1 WHERE (((t_pro.ARCHIV)=0)) ORDER BY t_pro.DAT_SORT DESC , t_pro.DAT DESC; Und hier die Eigenschaften: Sonst sind keine (wesentlichen) Eigenschaften vorhanden. Stefan
  13. Dankeschön, diesen Lösungsansatz habe ich auch gefunden und ausprobiert. Nachdem du mir diese Lösung nocheinmal nahegelegt hast, hab ich noch einmal komprimiert, noch einmal alles in eine neue MDB importiert, aber nach der 7. oder 8. Stichprobe bekomme ich wieder den selben Fehler *ratlos* Normalerweise arbeiten wir ja mit einem über verknüpfte Tabellen funktionierendes Access-FE mit Oracle-BE. Wenn das Recordset mit meinem fatalen Edit/Update über eine verknüpfte Tabelle geöffnet wird, kann ich Edit/Update ausführen. Wenn ich jedoch eine Pass-Through-Abfrage mache (eigentlich ja die selbe ODBC-Connection), bekomme ich diesen komischen Fehler. Wir verwenden hier Access2k, wäre es möglich, dass der Fehler mit AccessXP nicht mehr auftritt?
  14. Hallo Leute, folgende Fehlermeldung spuckt mir Access aus: Das Problem tritt bei einem RS.EDIT/RS.UPDATE auf. Ausgangspunkt ist eine Auflistung von Aufträgen. Jetzt das dubiose, bis zum ca. 18000. Auftrag kann ich das Update problemlos durchführen, wenn ich aber noch weiter runterscrolle, bekomme ich immer nur diesen Fehler. Kann mir da jemand helfen? Danke schonmal lg Stefan
  15. Nein, das sind alles Access-DBs (darum hab ich MDBs geschrieben), war etwas undeutlich sorry. EDIT: Ich hab da was für ADO gefunden, aber wir haben das ganze mit DAO aufgebaut, leider alles in alter Technik gemacht. Sind aber schon wieder einen Schritt näher an die Lösung gekommen
  16. Hey Leute, der Thread-Titel ist mal wieder nicht der Beste, schwierig zu beschreiben. Hier der Ausgangspunkt: 1) Verschiedene Quell-MDBs mit Daten 2) EINE Ziel-MDB, welche mit 1) befüllt werden soll 3) Die Access-Anwendung, in der grade das Modul für den Datentransfer entsteht. Das Problem: Ich suche eine Möglichkeit, wie ich Daten aus der einen DB (1) selektierte und in eine andere DB (2) einfüge -> das Problem dabei -> der ganze Transfer findet an einem Punkt statt, wo beide MDBs externe "Quellen" darstellen. Wer kann mir da weiterhelfen. Beispiel: Das ganze sieht in etwas so aus... in 1) 7 verschiedene MDBs mit Daten befüllt vorhanden in 2) 1 MDB, welche genau die Struktur hat, wie wenn man die 7 verschiedenen MDBs zusammenfügt, jedoch ohne Daten in 3) Hier sind wir soweit, dass wir die Daten dynamisch auslesen können, jedoch wissen wir noch nicht, wie wir die Daten in die Ziel-MDB bekommen (ohne Tausend schleifen *g*) Hoffentlich versteht ihr das Problem und habt vielleicht eine Lösung lg Stefan
  17. Aber nochmal eine Zusatzfrage: Wenn ich versuche, die wirklich passenden Datentypen zu verwenden (lt. dem Microsoft Dokument von einer der obigen Quellen), dann bleibt es weiterhin bei "Typen unverträglich", lediglich der Einsatz von Strings funktioniert einwandfrei. Ist das richtig so oder mache ich etwas falsch, dass ich zB. in ein Oracle-Feld mit number (Größe:1, Scale:0) keinen Access-Integer-Wert einfügen kann. Liegt das eventuell daran, dass ein integer-Wert größer sein kann als ein number-Wert aus Oracle mit Größe 1? lg Stefan
  18. Guten morgen, liebe Grüße zurück nach Wien an den Bungee-Jumper Ich war kürzlich erst aufm Turm (aber nur zum Essen). So Off-Topic-Ende, der Tipp war wirklich super, vielen Dank. Gruß Steve
  19. Hallo Gemeinde, folgendes Problem: Ich habe hier ein ziemlich großes Update-Statement in Access. jetzt bekomme ich bei einigen Feldern jeweils die Meldung "Typen unverträglich". Zieldatenbank ist Oracle 9i, welche in Access per ODBC darauf verlinkt ist. Beispielsweise möchte ich ein ursprüngliches Byte-Feld in ein Oracle-Feld mit den Attributen "Number, Größe:3" updaten, ich bekomme aber immer diesen Fehler. Wie bzw. wo muss ich die inkompatiblen Dinge konvertieren, dass es funktioniert? Im Update-Statement selber habe ich sogar schonmal alle Werte sicherheitshalber in "sichere Datentypen" konvertiert, ohne Erfolg. Hat jemand allgemeine Tipps für mich? Dankeschön! lg Stefan
  20. Hab mal die ganzen Felder geprüft, welche selektiert werden, diesmal ist kein Keyword dabei, hmmmm...
  21. Wir haben die Daten von ursprünglich Access nach Oracle 9i migriert (als Info am Rande). Habe das grade überprüft und es sind genau die selben Keys in Access und in Oracle vorhanden. In folgenden Tabellen heißt der Primary-Key jeweils "pronr1": - t_pro - t_pro1 - t_pro2 In dieser Tabelle ist kein Primary-Key vorhanden: - t_rek Gruß, Stefan
  22. Hallo Leute, schon wieder ich. Ich hab im Internet geforscht, jedoch hab ich es noch nicht verstanden. Wenn ich einen Recordset erstelle, welcher einiges Joins beinhaltet und die Tabellen alle in Access liegen, dann kann ich den Recordset auch wunderbar editieren (updaten) Set rs = CurrDataBase.OpenRecordset("SELECT ... FROM ((t_pro LEFT JOIN t_pro1 ON t_pro.pronr1 = t_pro1.pronr1) LEFT JOIN t_pro2 ON t_pro.pronr1 = t_pro2.pronr1) LEFT JOIN t_rek ON t_pro.pronr1 = t_rek.pronr1 WHERE t_pro.pronr1 = '" + strPronrOK + "'") ... rs.edit ... Liegen die Daten jedoch auf einer Oracle-DB und ich greife von Access über verlinkte Tabellen zu, dann bekomme ich immer nur den Fehler: Set rs = CurrDataBase.OpenRecordset("SELECT ... FROM ((t_pro LEFT OUTER JOIN t_pro1 ON t_pro.pronr1 = t_pro1.pronr1) LEFT OUTER JOIN t_pro2 ON t_pro.pronr1 = t_pro2.pronr1) LEFT OUTER JOIN t_rek ON t_pro.pronr1 = t_rek.pronr1 WHERE t_pro.pronr1 = '" + strPronrOK + "'") Das dumme daran ist - ich hoffe ich habe keinen Denkfehler - dass ich ca. 50 Felder updaten sollte. Eventuell wäre ja ein SQL-Update-Statement eine Lösung, jedoch weiß ich grade nicht, wie ich das intelligent implementieren soll. Vielleicht kann mir ja jemand in Theorie und/oder Praxis ein wenig auf die Sprünge helfen Vielen Dank! Stefan
  23. So, wohl vom Freitag motiviert hab ich am frühen morgen die Fehler gefunden und die funktionierende Lösung herbeigeführt: 1) Da ich die Tabellen über Access verknüpft habe, funktioniert der "rownum=x"-Befehl nicht, habe statt dessen SELECT TOP 1 genommen. 2) Jetzt kommt der Teufel, eines der selektierten Felder trug den schönen namen "user", irgendwo im hintersten Eck erinnerte sich mein Hirn daran, dass "user" ein von Oracle reserviertes Wort ist -> umbenannt -> läuft. Vielen Dank an die Helfer und schönen Arbeitstag Stefan
  24. Oh sorry, 2000er Version...
  25. Aja und das Ding erwartet 2 Argumente, nicht eines. Die Abfrage läuft über eine in Access verlinkte Tabelle welche via ODBC nach Oracle zeigt. Bin immer noch ratlos, was das sein kann.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...