Domino 9 und frühere Versionen > ND6: Entwicklung
dynamischer Export zu Access
Anfaenger:
Hey, vielen Dank für die vielen Einträge.
Stimmt, ich mach wirklich zu wenig(keine) Kommentare. Sollte ich mir wohl mal abgewöhnen.
Dank dem ErrorHandler bin ich dann auf eine Antwort gestolpert(siehe Link weiter unten).
Mit SQL kenn ich mich leider net aus.
Bin auch noch wirklich ein Anfänger, mach das erst seit kurzem.
Anscheinend liegt das Problem bei Access. Bei der Version die ich hab ('97) geht das wohl ganz einfach net:
http://www.manning-sandbox.com/thread.jspa?messageID=5612
Das ist natürlich blöd. Die Alternative die dort steht, lässt aber leider nur ein Eintrag zu. Hab jetzt den ganzen mittag noch damit verbracht dort etwas herauszufinden, wie ich damit mehrere Einträge hinbekomm, aber das ist mir leider net gelungen.
Ralf_M_Petter:
Hallo Anfaenger!
Habe mir schnell den Link angeschaut. Genau wie es dort beschrieben ist, sollte es funktionieren. Wie kommst du daruf, dass du mit Insert nur einen Satz schreiben kannst. Du kannst eine beliebige Anzahl von Inserts auf eine Tabelle machen. Wobei ich hier aber auf jeden Fall mit preparedStatement arbeiten würde.
Grüße
Ralf
Anfaenger:
Hallo Ralf
Vielen Dank für den Tipp. Nur steh ich jetzt vor nem anderen Problem: Was ist ein prepared Statement? Ich hab in der Hilfe und online leider nur Zeugs gefunden, was mir leider nicht weitergeholfen hat.
Ich werd jetzt einfach noch ne Weile weitersuchen, vielleicht werd ich noch fündig.
Grüße
Axel
flaite:
nicht so schlimm.
Imho ist das sowieso ein Thread, in dem leicht aneinander vorbeigeredet wird. Das sind für mich sowieso die interessantesten. :)
Ralf meint, dass es oft gefährlich ist, wenn man SQL statements als Strings zusammenbaut.
Böse Menschen können das ausnutzen.
table="SELECT * FROM " & Replace(FieldName," ","")
Wenn jetzt in FieldName sowas steht wie
"User; Delete From User";
Dies hätte zur Folge, dass alle Tupel (Datensätze) der User Tabelle gelöscht werden.
Wenn ich dich aber richtig verstanden habe, dann werden diese Select-Statements nicht durch Usereingaben generiert sondern aus dem Modell der Notes-Datenbank.
Unter diesen Bedingungen wäre es nach meiner bescheidenen Meinung wieder i.O. keine prepared Statements zu benutzen.
Deine Inserts/Updates werden sowieso "Prepared Statements"-artig generiert:
--- Code: ---For j=0 To view.ColumnCount-1
[...]
Call result.SetValue(Replace(view.columns(j).title, " ",""), ret(0))
[..]
Next j
result.UpdateRow
--- Ende Code ---
Dh.-> ein SQL Befehl wird nicht als String zusammengepuzzelt, sondern durch ...hmmm.. sagen wir auf einem höheren Abstraktionsniveau mit dafür spezialisierten Api Methoden.
--> Letztlich wird bei result.UpdateRow ein SQL Befehl gegen Access gesendet, der nicht durch (potentiell gefährliche) String-zusammenpuzzeln, sondern durch das Call result.SetValue(view.columns(j).title, " ", ""), ret(0)
Funktioniert es eigentlich jetzt, wie du dir es vorgestellt hast?
Gruß Axel
Ralf_M_Petter:
Hallo Axel!
Ich denke mal du hast dir den Link nicht angeschaut und deshalb reden wir aneinander vorbei. In dem Link ist nämlich beschrieben, dass updateRow eben unter bestimmten Umständen nicht funktioniert. Damit bin ich auch schon auf die Nase gefallen. Und es wird unter diesem Link empfohlen, mit dem SQL Statement Insert zu arbeiten. Wenn man jetzt 100 oder gar 1000 Inserts ausführen will sollte man auf jden Fall mit preparedStatements arbeiten, da sonst die performance furchtbar schlecht. Das parsen und aufbereiten eines SQL Zugriffspfades ist eine extrem teure Operation und sollte auf jeden Fall nicht zu oft gemacht werden.
Zu den SQL injections. Ich halte es auch in dem von dir beschriebenen Szenario nicht für schlau, da es ja offensichtlich da der Export ja offensichtlich für beliebige Notesdatenbanken funktionieren soll. Hier könnte der Benutzer selber eine kleine Datenbank erstellen, die dann Views enthält die SQL Injections ermöglichen.
Das Thema SQL Injections ist wirklich Brand gefährlich. Ich habe mal bei einem Bekannten, der eine PHP Anwendung am laufen hat das kurz demonstriert. Er war ziemlich Baff als ich eine Testtabelle von ihm gelöscht habe nur in dem ich bestimmte Eingaben in eines seiner Webformulare getätigt habe.
Grüße
Ralf
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln