Autor Thema: coll.GetFirstDocument gibt Nothing zurück trotz coll.Count = 1860  (Gelesen 3362 mal)

Offline outerspace

  • Frischling
  • *
  • Beiträge: 39
  • Geschlecht: Männlich
Hallo zusammen,
hat jemand von Euch folgendes Phänomen schon einmal erlebt und wenn Ja wie lautet die Lösung:

Ich mache einen db.Search auf der Anwendung die Abfrage von coll.Count ergibt 1860 Treffer in der NotesDocumentCollection. Wenn ich per For...Next Schleife und coll.GetNthDocument die docs holen will habe ich 1860 mal Nothig in der doc Variable. 2. Versuch war eine While Schleife mit getFirst und GetNextDocument, die Schleife wird nict ausgeführt da GetFirstDocument ebenfalls Nothig retourniert.
Irgendwelche Ideen.

Dank und Gruss
Andreas
« Letzte Änderung: 14.02.07 - 11:07:22 von outerspace »

klaussal

  • Gast
Nö.










Was sagt der Debugger ?

Offline outerspace

  • Frischling
  • *
  • Beiträge: 39
  • Geschlecht: Männlich
Das sind die Ergebnisse diverser Debuggerläufe:
die collection hat laut Count Property 1860 Treffer aber ich kriege keine Dokumente.
Wenn ich den search verändere sind es dementsprechend auch andere Count Werte.
Gruss
Andreas

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Den Fall hatte ich auch noch nicht.

Wie sieht denn der Code aus?

Was sagt denn der Debugger zum ersten eintrag in der Collection?

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

Offline outerspace

  • Frischling
  • *
  • Beiträge: 39
  • Geschlecht: Männlich
Das ist der vollständige Quellcode.
Per Dialogbox werden Suchkriterien abgefragt, der Search wird ausgeführt, count ist <> 0, ein Pfad und ein Name für ein xls-File wird abgefragt und erstellt, die Titelzeile wird eingetragen, ich kriege Nothing zurück und schaue auf ein bis auf die Titelzeile leeres Excel File.
 
Code
Sub Initialize
	Dim ws As New NotesUIWorkspace
	'Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim dlgdoc As NotesDocument
	Dim searchstring As String
	Dim dt As New NotesDateTime("21.01.1971")
	Dim dc As NotesDocumentCollection
	Dim dtfrom As NotesDateTime
	Dim dtto As NotesDateTime
	Dim filename
	Dim xlsapp As Variant
	Dim xlsdoc As Variant
	Dim cr As String
	Dim i As Integer
	Dim doc As NotesDocument
	Dim ndoc As NotesDocument
	
	cr = |
|
	
	Set db = ws.CurrentDatabase.Database
	Set dlgdoc = db.CreateDocument
nochmal:
	If ws.DialogBox("DlgSearch", True, True, False, False, False, False, "Please define search dates", dlgdoc, False, False, False) Then
		If "" = dlgdoc.From(0) Then
			Messagebox |From Date must be defined.|, 0, "Mandatory Field"
			Goto nochmal
		End If
		If "" = dlgdoc.To(0) Then
			Messagebox |To Date must be defined.|, 0, "Mandatory Field"
			Goto nochmal
		End If
		Set dtfrom = New NotesDateTime(dlgdoc.From(0))
		Set dtto = New NotesDateTime(dlgdoc.To(0))
		If "" = dlgdoc.ProblemTheme(0) Or " " = dlgdoc.ProblemTheme(0) Then
			If "" = dlgdoc.ProblemStatus(0) Or " " = dlgdoc.ProblemStatus(0) Then
				searchstring = |Form = "HelpDeskAssign"|+_
				| & @TextToNumber(@Left(ProblemID; 8)) >= |+_
				Cstr(Year(dtfrom.LSLocalTime))+Right$("00" + Cstr(Month(dtfrom.LSLocalTime)), 2)+Right$("00" + Cstr(Day(dtfrom.LSLocalTime)), 2) +_
				| & @TextToNumber(@Left(ProblemID; 8)) <= | +_
				Cstr(Year(dtto.LSLocalTime))+Right$("00" + Cstr(Month(dtto.LSLocalTime)), 2)+Right$("00" + Cstr(Day(dtto.LSLocalTime)), 2)
			Else
				searchstring = |Form = "HelpDeskAssign"|+_
				| & @UpperCase(ProblemStatus) = "|+dlgdoc.ProblemStatus(0)+_
				|" & @TextToNumber(@Left(ProblemID; 8)) >= |+_
				Cstr(Year(dtfrom.LSLocalTime))+Right$("00" + Cstr(Month(dtfrom.LSLocalTime)), 2)+Right$("00" + Cstr(Day(dtfrom.LSLocalTime)), 2) +_
				| & @TextToNumber(@Left(ProblemID; 8)) <= | +_
				Cstr(Year(dtto.LSLocalTime))+Right$("00" + Cstr(Month(dtto.LSLocalTime)), 2)+Right$("00" + Cstr(Day(dtto.LSLocalTime)), 2)
			End If
		Else
			If "" = dlgdoc.ProblemStatus(0) Or " " = dlgdoc.ProblemStatus(0) Then
				searchstring = |Form = "HelpDeskAssign" & ProblemTheme = "|+dlgdoc.ProblemTheme(0)+_
				|" & @TextToNumber(@Left(ProblemID; 8)) >= |+_
				Cstr(Year(dtfrom.LSLocalTime))+Right$("00" + Cstr(Month(dtfrom.LSLocalTime)), 2)+Right$("00" + Cstr(Day(dtfrom.LSLocalTime)), 2) +_
				| & @TextToNumber(@Left(ProblemID; 8)) <= | +_
				Cstr(Year(dtto.LSLocalTime))+Right$("00" + Cstr(Month(dtto.LSLocalTime)), 2)+Right$("00" + Cstr(Day(dtto.LSLocalTime)), 2)
			Else
				searchstring = |Form = "HelpDeskAssign" & ProblemTheme = "|+dlgdoc.ProblemTheme(0)+_
				|" & @UpperCase(ProblemStatus) = "|+dlgdoc.ProblemStatus(0)+_
				|" & @TextToNumber(@Left(ProblemID; 8)) >= |+_
				Cstr(Year(dtfrom.LSLocalTime))+Right$("00" + Cstr(Month(dtfrom.LSLocalTime)), 2)+Right$("00" + Cstr(Day(dtfrom.LSLocalTime)), 2) +_
				| & @TextToNumber(@Left(ProblemID; 8)) <= | +_
				Cstr(Year(dtto.LSLocalTime))+Right$("00" + Cstr(Month(dtto.LSLocalTime)), 2)+Right$("00" + Cstr(Day(dtto.LSLocalTime)), 2)
			End If
		End If
		Set dc = db.Search(searchstring, dt, 0)
		If 0 <> dc.Count Then
			filename = ws.OpenFileDialog( False , "please select file" , "Microsoft Excel-files|*.xls" , "" , "" )
			If Not(Isempty(filename)) Then
				On Error Resume Next
				Set xlsapp = GetObject("", "Excel.Application")
				If xlsapp Is Nothing Then
					Set xlsapp = CreateObject("Excel.Application")
					On Error Goto iserror
					If Not xlsapp Is Nothing Then
						Set xlsdoc = xlsapp.Workbooks.Add
						xlsapp.Visible = False
						Call xlsdoc.Activate
					End If
				Else
					On Error Goto iserror
					Set xlsdoc = xlsapp.Workbooks.Add
					xlsapp.Visible = False
					Call xlsdoc.Activate
				End If
				If Not xlsdoc Is Nothing Then
					xlsapp.Sheets(1).Select
					xlsapp.Range("A1").Select
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column) = "Link"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 1) = "Year"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 2) = "Month"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 3) = "Day"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 4) = "ID"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 5) = "Contributor"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 6) = "Contributor Cost Center"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 7) = "Theme"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 8) = "Application"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 9) = "Responsible"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 10) = "LBR"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 11) = "Subject"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 12) = "Location"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 13) = "Status"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 14) = "Effort spent for Analysis"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 15) = "Effort spent for Realization"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 16) = "Effort spent for Test"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 17) = "Total spent"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 18) = "Total costs"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 19) = "Charge CC"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 20) = "Category"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 21) = "Error Type"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 22) = "Error Origin Group"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 23) = "Error Origin Dept"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 24) = "Requester Group"
					xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 25) = "Requester Dept"
					If dc.Count <> 0 Then
						Set doc = dc.GetFirstDocument
						While Not doc Is Nothing
							Set ndoc = dc.GetNextDocument(doc)
							xlsapp.Range("A"+Cstr(i+1)).Select
							Call xlsdoc.Worksheets(1).Hyperlinks.Add(xlsapp.Range("A"+Cstr(i+1)), _
							"http://svmosel.lux.swissbank.com/LUX/luxsmart.nsf/HelpDeskAssign/"+Cstr(doc.UniversalID)+"?OpenDocument", _
							, , _
							doc.ProblemID(0))
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 1) = Left$(doc.ProblemID(0), 4)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 2) = Right$(Left$(doc.ProblemID(0), 6), 2)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 3) = Right$(Left$(doc.ProblemID(0), 8), 2)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 4) = doc.ProblemID(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 5) = doc.ProblemContributorName(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 6) = doc.ProblemContributorCostCenter(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 7) = doc.ProblemTheme(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 8) = doc.ProblemThemeCategory(0)
							If "CLO" = Ucase$(doc.ProblemStatus(0)) Then
								xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 9) = doc.ProblemLastResponsible(0)
							Else	
								xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 9) = doc.ProblemResponsible(0)
							End If
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 10) = doc.ProblemLBR(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 11) = doc.ProblemSubject(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 12) = Join(doc.LocSel, ", ")
							If "ASS" = Ucase$(doc.ProblemStatus(0)) Then
								xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 13) = "Assigned"
							Else	
								If "ACC" = Ucase$(doc.ProblemStatus(0)) Then
									xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 13) = "Accepted"
								Else	
									If "CLO" = Ucase$(doc.ProblemStatus(0)) Then
										xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 13) = "Closed"
									Else	
										xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 13) = doc.ProblemStatus(0)
									End If
								End If
							End If
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 14) = Cstr(doc.AnalyseEffortDone(0))
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 15) = Cstr(doc.ProblemEffortDone(0))
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 16) = Cstr(doc.TestEffortDone(0))
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 17) = Cstr(doc.TotalEffortSpent(0))
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 18) = Cstr(doc.ProblemCosts(0))
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 19) = doc.ProblemChargeNumber(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 20) = doc.ClaimCat(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 21) = doc.FehlerArt(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 22) = doc.ErrorOriginGroup(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 23) = doc.ErrorOriginDept(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 24) = doc.RequesterList(0)
							xlsdoc.Worksheets(1).cells(xlsapp.activecell.row, xlsapp.activecell.column + 25) = doc.RequesterDept(0)
							Set doc = ndoc
						Wend
					End If
					Call xlsdoc.SaveAs(filename(0))
					xlsapp.Visible = True
				End If
			End If
		End If
	End If
	Exit Sub
iserror:
	Messagebox "Error" & Str(Err) & ": " & Error$ & cr & "Please contact Administrator.", 48, "Error"
	Resume Next
End Sub
Gruss
Andreas

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Auf den ersten Blick sieht das eiogentlich ganz ok aus.

Beim zweiten Blick sind mit zwei Sachen aufgefallen.


1.  Mir fehlen hier zwei Klammern.

Set doc = dc.GetFirstDocument
While Not (doc Is Nothing)
      Set ndoc = dc.GetNextDocument(doc)
      ...   
      Set doc = ndoc
Wend


2.  Warum der Stund mit dem ndoc? Ist eigentlich überflüssig

Set doc = dc.GetFirstDocument
While Not doc Is Nothing
      Set ndoc = dc.GetNextDocument(doc)
      ...   
      Set doc = ndoc
Wend


Was sagt denn der Debugger zum ersten Dokument in der Collection?


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

Offline outerspace

  • Frischling
  • *
  • Beiträge: 39
  • Geschlecht: Männlich
Hallo
zu 1. mit Klammern tut es auch nicht.
zu 2. ist eine alte Gewohnheit von mir wenn ich per while schleife docs aus einer ansicht hole und innerhalb der schleife felder verändere die bewirken, dass das current doc nicht mehr in der Ansicht angezeigt wird. Dann würde set doc = view.GetNextDocument(doc) nichts zurückliefern weil doc nicht mehr in Ansicht. Bei einer collection kann man das natürlich weglassen, da hast Du recht.
Der Debugger sagt zum ersten Dokument garnichts, die Variable sieht aus wie frisch deklariert.

Gruss
Andreas

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Der Debugger sagt zum ersten Dokument garnichts, die Variable sieht aus wie frisch deklariert.

Das meinte ich nicht unbedingt. Schau die mal im Debugger den Inhalt der Collection an. Wie sieht da denn der erste Eintrag aus?


Hast du auch mal den Notes-Client nuegestartet, die Cache.ndk gelöscht, neue Kopie der Datenbank erstellt?


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

Offline Otto

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
@outerspace:

interessant wäre doch was der debugger zu 'ndoc' sagt, alse nach
'set ndoc = doc' am Schleifenanfang.
Ich tippe mal drauf, dass er da gar nicht reinspringt weil bereits 'doc = nothiong' zutrifft?
Wenn ja, schau mal in den DB-Eigenschaften, ob da 'Wiederherstellbare Löschungen gesetzt sind'

Gruss
Otto

Offline outerspace

  • Frischling
  • *
  • Beiträge: 39
  • Geschlecht: Männlich
Hallo zusammen,
Nach viel probieren, cache löschen und kopieren habe ich es gefunden.
DB-Eigenschaften war schon der richtige Weg, nur nicht die "Wiederherstellbaren Löschungen" waren es nicht, sondern der Datenbank Typ, der war nämlich nicht mehr "Standard" sondern "Multi DB Search".
Nach Umstellung auf "Standard" in meiner lokalen Kopie hat es sofort wieder funktioniert.
Bleibt nur noch die Kleinigkeit es auf der Server DB zu ändern, was im Moment nicht funktioniert, ich nehme an ich muss einen Augenblick abpassen wenn kein User auf der DB arbeitet.
Hat irgendjemand weitergehende Informationen über die Datenbank Typen und deren Auswirkungen oder weiss wo man nachlesen kann. Die Hilfe war ziemlich spärlich.

@Axel
Auch auf die Gefahr hin dämlich zu wirken, wie kann man sich im Debugger den Inhalt der Collection ansehen?

Gruss
Andreas

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
@Axel
Auch auf die Gefahr hin dämlich zu wirken, wie kann man sich im Debugger den Inhalt der Collection ansehen?

Das wirkt nicht dämlich. Den Inhalt einer Collection siehst du im Debugger nicht, nur die Anzahl. Ich hab's mit den Listen und Arrays verwechselt. Sorry.

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

Offline outerspace

  • Frischling
  • *
  • Beiträge: 39
  • Geschlecht: Männlich
Puh,
grosse Erleichterung.........
Wenn es so eine schicke Möglichkeit gegeben hätte, die ich die ganzen Jahre übersehen hätte, wäre das für mich sehr ärgerlich gewesen.

Danke und Gruss
Andreas

Offline xyungel

  • Frischling
  • *
  • Beiträge: 8
mach doch mal nen errorhandler rein und gib dir die Zeile des Fehlers und den Fehler selbst aus

Offline xyungel

  • Frischling
  • *
  • Beiträge: 8
achso hatte sich schon erledigt...

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Wie sieht es denn mit Softdeletions aus ?

Schau dir jedes Dokument in der While-Schleife mit

If doc.IsValid Then
...
End If

an.

Gruß

Norbert
Situs vilate in isse tabernit.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz