Newsgroup: it.comp.appl.notes-domino
Titolo: Popolare un db Notes da una tabella MySQL

Fra qualche giorno avremo un fermo del gestionale per tutta la giornata. Per 
venire incontro al magazzino (e soprattutto a fini didattici ^_^ ) pensavo di 
realizzare un db grezzo, che vorrei alimentare almeno in parte con una query 
SQL sul db MySQL del gestionale.
Premesso che sono totalmente digiuno di Lotus script e che per ora mi fermo 
al @Formula, mi chiedevo se mi sapete consigliare una procedura per ottenere 
quello che vorrei. Leggere il db e basta non credo sarebbe sufficiente, in 
quanto nel momento in cui il gestionale verra? spento non avrei piu? accesso 
al dato.
Come riverso il risultato di una query in un db Notes?  
-- 
  Cristian Castellari - 
www.skyflash.it
  XBox Live TAG: Wiitiful Sky
  Wii TAG: 2634 4285 3158 4638
  Per scrivermi, de-ROTta l'email

Il modo più semplice richiede appunto che tu scriva una routine lotus
script che inserirai in un agente o in un pulsante di una vista.
Non è poi così difficile (ci sono riuscito anch'io ;-))
Innanzitutto devi esplicitare nelle opzioni dell'agente l'utilizzo
della classe ODBCConnection, perchè non sono caricate di dafault. In
Windows si fa così (la directory ovviamente dipende dalla tua
installazione):
Option Public
Uselsx "C:\notes\NLSXODBC.dll"
In linux sinceramente non lo so, anzi, se qualcuno volesse
illuminarmi . . .
La routine sarà qualcosa del tipo (l'ho adattata in un paio di minuti
e potrei avere omesso qualcosa):
Sub Initialize
	Dim con As New ODBCConnection
	Dim qry As New ODBCQuery
	Dim res As New ODBCResultSet
	Dim ValoreCampo1, ValoreCampo2, ValoreCampo3 As String
	Dim Sessione As New NotesSession
	Dim NuovoDoc As NotesDocument
	Set Database = Sessione.CurrentDatabase
REM attivo la connessione
	Call con.ConnectTo("nome del tuo DSN ODBC", "UTENTE", "PASSWORD")
REM	Scrivo la query e la passo al DB
	Set qry.Connection = con
	qry.SQL = "SELECT  campo1, campo2, campo3 FROM Tabella"
	Set res.Query = qry
	Call res.Execute
REM	Controllo che il risultato sia disponibile
	If res.IsResultSetAvailable Then
	REM Imposto la ricorsione che per ogni record trovato inserisce un
documento Documento popolandolo con i dati estratti
		Do
			res.NextRow
			ValoreCampo1 = res.GetValue(1)
			ValoreCampo2 = res.GetValue(2)
			ValoreCampo3 = res.GetValue(3)
			Set NuovoDoc = Database.CreateDocument
			NuovoDoc.Form = "Documento"
			NuovoDoc.Campo1 = ValoreCampo1
			NuovoDoc.Campo2 = ValoreCampo2
			NuovoDoc.Campo3 = ValoreCampo3
			Call NuovoDoc.Save( True, True )
		Loop Until res.IsEndOfData
	End If
End Sub

 		Do
Domanda... questa procedura funziona in "aggiornamento" o riscrive ogni 
volta? Cioe', se domani rieseguo l'agente, che accade? Mi raddoppia tutti i 
dati o ripopola da zero?


 dati o ripopola da zero?
Purtroppo scritta così raddoppia i dati. E' ovviamente possibile
renderla più complessa affichè gestisca l'aggiornamento dei dati.
Qui però si apre un mondo sia come opportunità che come complessità.
Tutto dipende da cosa ci devi fare con i dati.
Se il database notes serve solo in lettura e non ci devi scrivere
informazioni che puoi vengano preservate quando fai l'aggiornamento è
sufficiente prima cancellare tutti i record e poi reimportare. Puoi
farlo a mano o con un'altra procedura del tipo:
Sub Initialize
	Dim Sessione As New NotesSession
	Dim Vista1 As NotesView
	Dim Database As NotesDatabase
	Dim dc As NotesDocument
	Set Database = Sessione.Currentdatabase
	Set Vista1 =  Database.GetView("Importa")
	Set dc = Vista1.GetFirstDocument
	Do Until dc Is Nothing
		Set doc = Vista1.GetNextDocument(dc)
		Call dc.Remove(True)
		Set dc = doc
	Loop
End Sub
Ciao