PDA

Vollständige Version anzeigen : Problem mit Stringaddition


ErichK
23.10.2011, 17:21
hallo leute

habe letzt woche leider ein update von office 2003 auf office 2007 durchgeführt.

soweit hab ich alle vba unstimmigkeiten beseitigt ...
nur einen fehler verstehe ich nicht und kann ihn daher nicht beseitigen.

hab ihn auf folgendes eingegrenzt:

Function Ablauf()

Dim qAbf As DAO.QueryDef

Dim iMax, iT

iMax = 14

For i = 1 To iMax
CurrentDb.QueryDefs("600_TempAbfrage").SQL = SQL(i, "Team1")
iT = 400 + i
Set qAbf = CurrentDb.CreateQueryDef("", "Select * into " & iT & "_Team from 600_TempAbfrage")
qAbf.Execute dbFailOnError
Next i

End Function

Function SQL(iTage, tStelle)

Dim tSQL

tSQL = "("
tSQL = tSQL & SQL_Abfrage("T1", iTage, tStelle, 1, 1)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 2)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T2", iTage, tStelle, 2, 3)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 4)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T3", iTage, tStelle, 2, 5)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 6)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T4", iTage, tStelle, 0, 7)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 8)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T5", iTage, tStelle, 0, 9)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 10)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T6", iTage, tStelle, 0, 11)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 12)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T7", iTage, tStelle, 0, 13)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 14)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T8", iTage, tStelle, 2, 15)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 16)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T9", iTage, tStelle, 0, 17)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 18)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T10", iTage, tStelle, 0, 19)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 20)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T11", iTage, tStelle, 2, 21)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 22)
tSQL = tSQL & ") union all ("
tSQL = tSQL & SQL_Abfrage("T12", iTage, tStelle, 0, 23)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 24)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 25)
tSQL = tSQL & ") union all ("
tSQL = tSQL & LeerZeile("", "", 26)
tSQL = tSQL & ")"

SQL = tSQL

End Function

im prinzip erstelle ich eine formatierte tabelle mit teamdaten der letzten 14 tage.

die einzelnen themen (T1, T2, T3 usw.) werden für einen bessere ansicht im Excel mit einer einzelnen leerzeile versehen.
zwischen den einzelnen tagen werden 3 leerzeilen eingefügt.

das hat bisher in Acc2003 optimal funtioniert.

nach dem umstieg auf Accc2007 überspringt er in der Funktion SQL teilweise einzelnen Zeilen.
einmal läßt er eine Leerzeile aus, dann wieder ein Thema oder eine Leerzeile.
bei jedem durchlauf aber etwas anderes.
NIEMALS das gleiche.

Wenn man es jedoch im einzelschritttmodus macht ergibt sich NIEMALS der selbe fehler.

was kann da der Fehler sein.

DANKE für eure hilfe im vorhinein.

PS: was in SQL_Abfrage() oder Leerzeile gemacht wird ist egal, hab ich schon probiert.

Lanz Rudolf
23.10.2011, 18:37
Hallo
möglich das SQL nicht ein Guter Name für eine Function ist
Function SQL(iTage, tStelle)
da SQL ein reseviertes wort ist
versuche es mit z.B. FuncSql

Du weist das bei einer Solche Definition
Dim iMax, iT

beide Felder als Variant definiert sind ?
evtl. Besser
Dim iMax as Integer , iT as Integer


was geschiet in LeerZeile z.B. bei LeerZeile("", "", 22)
zeige auch diese Code

mache einmal nach
tSQL = tSQL & ")"
Debug.Print tSQL
dann kannst Du im Direkt-Fenster Sehen was Du in tSQL hast, ob das ein sinvoller SQL-Befehl ist ;)

ErichK
24.10.2011, 13:33
hallo

danke für die antwort.

leider hat keiner deiner tips eine echte lösung gebracht.

ABER ...

wenn ich in meiner SQL Funktion

Function FuncSQL(iTage, tStelle)

Dim tSQL

tSQL = "("
Debug.Print tSQL
tSQL = tSQL & SQL_Abfrage("ASA Verlauf", iTage, tStelle, 1, 1)
Debug.Print tSQL
tSQL = tSQL & ") union all ("
Debug.Print tSQL
tSQL = tSQL & LeerZeile("", "", 2)
Debug.Print tSQL
tSQL = tSQL & ") union all ("
Debug.Print tSQL

uswusw ... mache

funktioniert es so wie es soll.

wenn ich die
Debug.Print tSQL
wieder raus nehme, ist das problem mit dem verschlucken (IMMER anderer SQL teile) wieder vorhanden.

Es funktioniert zwar, kann aber nicht zuordnen warum :-//


*cu*

Lanz Rudolf
24.10.2011, 14:42
Hallo
ich habe gemeint das Du Das mit Debug.Print
ganz am schluss machst ;)
also noch dem letzten tSQL=tSQL &.........
tSQL = tSQL & ")"
Debug.Print tSQL
und Zeige uns was er dir im Direkt Fenster Zeigt :)

was geschiet in LeerZeile wie siht der Code aus ?


Du könntest auch das verstchen:
Debug.Print "Test T2-->";SQL_Abfrage("T2", iTage, tStelle, 2, 3)

tSQL = tSQL & SQL_Abfrage("T2", iTage, tStelle, 2, 3)
Was Zeigt er Dir bei/Hinter Test T2-->" im DirektFenster ? ist das dass was Du möchtest Erwartest ?

Das könnest Du auch für Alle Machen T1 - T12

Lanz Rudolf
24.10.2011, 15:07
Hallo
gehe ein mal hier hin:
http://dl.dropbox.com/u/46590638/ACC/ACCESS%202000BU%20%20Begleitunterlage.pdf
da sollte sich eine PDF Datei öffnen:
list da auf Seite 166 "8.5 Fehler Suche" und folgende

und evtl. Seite 76 "5.3.17 Fehler in Abfrage"

Du kannst auch die ganze Doc lesen oder/und runterladen ;)