Domino 9 und frühere Versionen > ND6: Entwicklung

INSERT und UPDATE per ODBC (Notes 6.5)

(1/2) > >>

shüddü:
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"

--- Ende Code ---

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ü

shüddü:
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 :)

Axel:

--- Zitat von: shüddü am 23.05.05 - 13:47:23 ---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?

--- Ende Zitat ---

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
 

shüddü:
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

--- Ende Code ---

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?

Axel:
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)

--- Ende Zitat ---


Axel


Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln