Autor Thema: INSERT und UPDATE per ODBC (Notes 6.5)  (Gelesen 4397 mal)

Offline shüddü

  • Frischling
  • *
  • Beiträge: 5
INSERT und UPDATE per ODBC (Notes 6.5)
« am: 23.05.05 - 11:03:18 »
Hallo erstmal :)

ich bin neu hier und habe irgendwie ein riesen Problem...

ich will in die Notes Datenbank verschiedene Datensätze, (Aufgaben, Termine, Kontakte, Mailentwürfe,...) per ODBC (notesSQL) schreiben und habe auch schon einiges geschafft, Kontakte sind kein Problem mehr, auch Mailentwürfe schreibe ich via notesSQL tadellos rein...

Mein aktuelles Problem lieg jedoch bei den Terminen (Appointments):
Erstmal lässt sich die Datenbank nicht mit
SELECT * FROM Apointment
abfragen, da ich hier den Fehler "[Lotus][ODBC Lotus Notes] Invalid Time value" zurück bekomme.... und das, obwohl alle Einträge in Appointments direkt über Lotus Notes eingetragen wurden, ein Fehler meinerseits ist also auszuschliessen...
Nun gut, das habe ich dann gelöst, indem ich einfach die Felder direkt abgefragt habe:

Code
SELECT
  Form,
  tmpRW,
  tmpOwnerHW,
  tmpParticipantHW,
  tmpNoActionBar,
  _ExpandGroups,
  Logo,
  ClientSupportsAltName,
  NamePreference,
  LanguagePreference,
  SaveOptions,
  MailOptions,
  "Sign",
  Encrypt,
  "From",
  tmpOEMClient,
  tmpDuration,
  LocalTimeZone,
  _FromPreferredLanguage,
  ApptUNID,
  OnlinePlace,
  _LangChair,
  AltChair,
  AppointmentType,
  _ParticipantSwitcher,
  _OnlineSwitcher,
  _BorderColor,
  _WatchedItems,
  _AllowEncryptedEdit,
  tmpAdditionalInviteeButton,
  tmpAdditionalRoomsButton,
  tmpHideTimeZone,
  tmpEventLabel,
  tmpRepeatConflictDates,
  DispDuration,
  tmpAppointmentType,
  tmpAppointmentType_1,
  Alarms,
  OrgConfidential,
  BookFreeTime,
  Subject,
  StartDate_2,
  StartTime_2,
  EndDate_2,
  DispDur_2,
  StartDate,
  StartTime,
  EndDate,
  EndTime,
  dispDuration_1,
  StartDate_1,
  StartTime_1,
  EndDate_1,
  DispDur_1,
  tmpShowTZ,
  StartTimeZone,
  EndTimeZone,
  tmpStartTime_Local,
  Repeats,
  dispRepeats,
  tmpRequiredAttendees,
  tmpOptionalAttendees,
  tmpFYIAttendees,
  EnterSendTo,
  EnterCopyTo,
  EnterBlindCopyTo,
  tmpChair,
  tmpOrganizer,
  OrganizerInclude,
  tmpSentBy,
  Location,
  tmpRooms,
  tmpResources,
  RoomToReserve,
  Resources,
  OnlineMeeting,
  dispOnlineMeeting,
  MeetingType,
  dispMeetingType,
  Presenters,
  OnlineLocation,
  OnlinePlaceToReserve,
  tmpOnlinePlace,
  AudioVideoFlags,
  SendAttachments,
  WhiteBoardContent,
  Categories,
  SchedulerSwitcher,
  dispBodyDocLink,
  Body,
  Notes
FROM "Appointment"

Hier habe ich das dementsprechende Feld, das mir den Fehler ausgelöst hat (warum auch immer) einfach weggelassen (zu meiner Schande weiss ich jetzt gar nicht genau, welches es war)...

Lustig ist auch, dass die beiden Felder "Sign" und "From" bei der Abfrage in Anführungszeichen gefasst werden müssen, da reservierte Wörter..... oO

Dies alles nur zur Anmerkung am Rande, vieleicht hat ja einer von euch Infos darüber.
Das eigentliche Problem ist nämlich ein ganz anderes...
Bei einem INSERT oder UPDATE Versuch bekomme ich folgende Fehlermeldung:

[Lotus][ODBC Lotus Notes][Lotus Notes Server] Notes API driver error: Values does not exist in keywordlist for field AppointmentType

Was will er mir damit sagen?
AppointmentType ist bei einem SELECT mit einem String mit den Werten "0", "1", "2", "3" oder "4" belegt, bei einem UPDATE oder INSERT akzeptiert er diese Werte jedoch nicht...
ich bin ehrlich gesagt ziemlich ratlos, da es weder mit Strings noch mit Integern funktioniert.

Ich hoffe, ihr könnt mir in diesem Punkt weiterhelfen, ich steh jetzt wirklich an mit meinem Latein.


Dann wär da noch eine Kleinigkeit, und zwar habe ich tagelang damit verbracht, den ungefähren Aufbau der Datenbank herauszufinden, jedoch ist das noch lange nicht alles und ich blicke grossteils noch überhaupt noch nicht durch, wie das Ding denn nun wirklich aufgebaut ist....
Gibt es eventuell irgendwo eine Datenbankbeschreibung, wo beschrieben ist, wie die einzelnen Tabellen miteinander referenzieren?
Das würde mir extrem weiterhelfen....

Ich danke euch vielmals im voraus, liebe Grüsse,

Berti aka shüddü

Offline shüddü

  • Frischling
  • *
  • Beiträge: 5
Re: INSERT und UPDATE per ODBC (Notes 6.5)
« Antwort #1 am: 23.05.05 - 13:47:23 »
noch eine frage:
ginge das alles auch über COM?

kann ich in VB per COM Mails in die Datenbank schreiben, Kontakte schreiben und updaten, Termine setzen und Aufgaben erstellen?

edit: geht es denn auch irgendwie, ein Lotus Script über COM abzusetzen?

Vielen Dank im voraus nochmal :)
« Letzte Änderung: 23.05.05 - 13:49:17 von shüddü »

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: INSERT und UPDATE per ODBC (Notes 6.5)
« Antwort #2 am: 23.05.05 - 14:02:29 »
kann ich in VB per COM Mails in die Datenbank schreiben, Kontakte schreiben und updaten, Termine setzen und Aufgaben erstellen?

edit: geht es denn auch irgendwie, ein Lotus Script über COM abzusetzen?

Hi,

selbstverständlich kannst du auch Mails über COM in die DB schreiben.

von IBM gibt's ein Redbook zu diesem Thema. Außerdem war das hier im Forum auch schon ein paar mal ein Thema. Bemühe mal die Forensuche.

Ein Script kannst du nicht absetzen, nur einzelne Befehle.

Axel
 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline shüddü

  • Frischling
  • *
  • Beiträge: 5
Re: INSERT und UPDATE per ODBC (Notes 6.5)
« Antwort #3 am: 25.05.05 - 13:40:15 »
Vielen Dank Axel!

ich hab mich da auch schon ein bisschen reingearbeitet und das auslesen funktioniert ja zumindest schonmal:

Code
    Dim domSession As New Domino.NotesSession
    Dim domDatabase As New Domino.NotesDatabase
    Dim domDocument As NotesDocument
    Dim domViewEntry As NotesViewEntry
    Dim domView As NotesView
    Dim domViewNav As NotesViewNavigator
    Dim strName As String
    
    domSession.Initialize
    
    Set domDatabase = domSession.GetDatabase("", "names.nsf")
    Set domView = domDatabase.GetView("Kontakte")
    Set domViewNav = domView.CreateViewNav
    Set domViewEntry = domViewNav.GetFirstDocument()
    Set domDocument = domViewEntry.Document
    
    strName = domDocument.GetItemValue("FullName")(0)
    MsgBox strName

jetzt hab ich aber ehrlich gesagt nicht den blassesten schimmer, wie ich da einen neuen datensatz erstelle oder einen vorhandenen updaten kann...
auch mit der sache mit den views [ Set domView = domDatabase.GetView("Kontakte") ] hab ich probleme, weil ich nicht weiss, welche views es denn überhaupt gibt, wo krieg ich die denn her? ???

leider hab ich über die boardsuche irgendwie auch nichts gefunden...

könnt ihr mir da eventuell weiterhelfen?

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: INSERT und UPDATE per ODBC (Notes 6.5)
« Antwort #4 am: 25.05.05 - 14:10:43 »
Hi,

am einfachsten ist es wenn du mit dem Designer dir die, in der DB vorhandenen, Views anschaust.

Im Redbook steht alles was du brauchst. Hier mal ein Auszug:

Zitat
...
• Notice that we used the New keyword when declaring NotesSession.
With COM, NotesSession is the only class which allows the New
keyword. Because of this, you will have to work through the other
methods and properties available to you that return Domino objects. For
example, instead of:
Dim db As New NotesDatabase(“server”,“filename”)
Dim name As New NotesName( “first last/ou/o” )
Dim doc As New NotesDocument(db)
Use:
Dim db As NotesDatabase
Set db = session.GetDatabase(“server”,“filename”)
Dim name As NotesName
Set name = session.CreateName(“first last/ou/o” )
Dim doc As NotesDocument
Set doc = db.CreateDocument
• COM access to Domino is only available for the Domino back-end
classes. It does not support any of the front end or user interface classes,
which include Button, Field, Navigator, NotesTimer, NotesUIDatabase,
NotesUIDocument, NotesUIView, NotesUIWorkspace.
• COM does support handling items as extended properties. An easy way
to access a database item in LS is by treating it as a NotesDocument
property. For example, the following LS sets the value of the Subject
item on a document to “Hello”:
doc.Subject = “Hello”
You cannot do this in VB. You have to code it like this:
doc.ReplaceItemValue( “Subject”,“Hello” )
and instead of using this line to get the content of the Address field:
doc.Address(0)
use this line in Visual Basic:
doc.GetItemValue(“Address”)(0)


Axel


Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline shüddü

  • Frischling
  • *
  • Beiträge: 5
Re: INSERT und UPDATE per ODBC (Notes 6.5)
« Antwort #5 am: 30.05.05 - 09:29:03 »
hi alex, vielen dank nochmal :)
jetzt bin ich schon ein riesenstück weiter, ich kann jetzt datenstze auslesen und diese updaten und speichern:

Code
    While Not (domDoc Is Nothing)
        strName = domDoc.GetItemValue("lastname")(0) & " " & domDoc.GetItemValue("firstname")(0) & " " & domDoc.GetItemValue("shortname")(0) & " - " & domDoc.GetItemValue("fullname")(0)
        MsgBox strName, vbInformation, "Datensatz Nr. " & intIndex
        Call domDoc.ReplaceItemValue("FullName", "Test 1234567")
        Call domDoc.Save(True, True)
        Set domDoc = domView.GetNextDocument(domDoc)
        intIndex = intIndex + 1
    Wend


nur habe ich ein problem bei der anlage von neuen datensätzen, da diese anscheinend zwar im speicher existieren, leider aber nicht in die datenbank geschrieben werden:

Code
    Set domNewDoc = domDb.CreateDocument
    Call domNewDoc.ReplaceItemValue("FirstName", "hans")
    Call domNewDoc.ReplaceItemValue("ShortName", "hansi")
    Call domNewDoc.ReplaceItemValue("LastName", "müller")
    Call domNewDoc.ReplaceItemValue("FullName", "hans müller")
    Call domNewDoc.Save(True, True)

ich hab auch den befehl CopyToDatabase(domDb) versucht, aber es geht nicht, der neue satz wird nicht reingeschrieben.
im redbook hab ich nichts gefunden, dass irgendwie mein problem lösen würde....

darf ich dich/euch nochmal belästigen?

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: INSERT und UPDATE per ODBC (Notes 6.5)
« Antwort #6 am: 30.05.05 - 09:54:08 »
Die Datensätze sind schon da. Nur fehlen ihnen wahrscheinlich ein paar Attrtibute samt Werten, die nötig sind, um angezeigt zu werden (z.B. Form).
Am besten du recherchierst mal, welche Attribute der jeweilige Datensatz benötigt, um "gültig" zu sein.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: INSERT und UPDATE per ODBC (Notes 6.5)
« Antwort #7 am: 30.05.05 - 10:16:32 »
Hi,

was mir auf Anhieb auffällt, dass du keinen Maskennamen setzt.

Set domNewDoc = domDb.CreateDocument
Call domNewDoc.ReplaceItemValue("Form", "Name deiner Maske")
Call domNewDoc.ReplaceItemValue("FirstName", "hans")
Call domNewDoc.ReplaceItemValue("ShortName", "hansi")
Call domNewDoc.ReplaceItemValue("LastName", "müller")
Call domNewDoc.ReplaceItemValue("FullName", "hans müller")
Call domNewDoc.Save(True, True)


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline shüddü

  • Frischling
  • *
  • Beiträge: 5
Re: INSERT und UPDATE per ODBC (Notes 6.5)
« Antwort #8 am: 30.05.05 - 12:20:57 »
ihr hattet beide recht, anfangs war der datensatz nicht vorhanden, weil ich den maskennamen nicht gesetzt hatte, danach war er vorhanden, wurde aber nicht angezeigt...
ich habe nun alle vorhandenen felder befüllt und dann klappts auch mitm speichern, der datensatz wird korrekt angezeigt

vielen dank, ich hoffe ich komme jetzt alleine weiter und muss euch nicht mehr nerven :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz