collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 57
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13804
  • stats Beiträge insgesamt: 63539
  • stats Themen insgesamt: 8609
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Laufzeitfehler 13 --> Typen unverträglich  (Gelesen 316 mal)

Offline derilzemer

  • Access-Meister
  • ***
  • Beiträge: 544
    • Quartettportal
Laufzeitfehler 13 --> Typen unverträglich
« am: September 19, 2017, 20:43:58 »
Hallo,
ich habe eine Suchformular dem ein qryQuartettSuche zugrunde liegt und auch funktioniert. Nun wollte ich aber wenn das Formular geöffnet ist die Sortierung über eine Schaltfläche ändern, von SpielNr. auf Spiel-ID, also mehr oder weniger dynamisch. Dazu habe ich die Schaltfläche cmdIDSortieren erstellt, mit dem Ereignis beim Klicken folgenden VBA Code integriert.
Private Sub cmdIDSortieren_Click()
   Dim strsql As String
       strsql = "SELECT tblSpiele.SpielID,
       tblVerlag.Verlag,
       tblSpiele.SpielNr,
       tblSpiele.SpTitel,
       tblSerien.Serie,
       tblKategorie.Kategorie,
       tblSpiele.Ausgabejahr,
       tblSpiele.Preis,
       tblHaendler.VerkNn,
       tblBildmotive.Bildmotiv,
       tblVerlag.BilderOrdner,
       tblSpiele.Verzeichnisname,
       tblBilderZuSpiel.BildDateiName " _
& "FROM tblVerlag
RIGHT JOIN ((tblSerien
             RIGHT JOIN (tblKategorie
                         RIGHT JOIN (tblHaendler
                                     RIGHT JOIN tblSpiele ON tblHaendler.HaendlerID = tblSpiele.HaendlerID_F) ON tblKategorie.KategorieID = tblSpiele.KategorieID_F) ON tblSerien.SerieID = tblSpiele.SerieID_F)
            INNER JOIN (tblBildmotive
                        INNER JOIN tblBilderZuSpiel ON tblBildmotive.BildMotivID = tblBilderZuSpiel.BildmotivID_F) ON tblSpiele.SpielID = tblBilderZuSpiel.SpielID_F) ON tblVerlag.VerlagID = tblSpiele.VerlagID_F " _
& "WHERE (((tblBildmotive.Bildmotiv) = Deckblatt (DB)
        OR (tblBildmotive.Bildmotiv) = Schachtel-DB)
       AND ((Nz([tblVerlag].[Verlag])) LIKE " * " & [Formulare]![frmQuartettSuche]![cboVerlagSuche] & " * ")
       AND ((Nz([tblSpiele].[SpielNr])) LIKE " * " & [Formulare]![frmQuartettSuche]![txtSpieleNr] & " * ")
       AND ((Nz([tblSpiele].[SpTitel])) LIKE " * " & [Formulare]![frmQuartettSuche]![txtSpielTitel] & " * ")
       AND ((Nz([tblSerien].[Serie])) LIKE " * " & [Formulare]![frmQuartettSuche]![cboSerienSuche] & " * ")
       AND ((Nz([tblKategorie].[Kategorie])) LIKE " * " & [Formulare]![frmQuartettSuche]![cboKategorieSuche] & " * ")
       AND ((Nz([tblSpiele].[Ausgabejahr])) LIKE " * " & [Formulare]![frmQuartettSuche]![txtAusgabejahr] & " * ")
       AND ((Nz([tblSpiele].[Preis])) LIKE " * " & [Formulare]![frmQuartettSuche]![txtPreisFilter] & " * ")
       AND ((Nz([tblHaendler].[VerkNn])) LIKE " * " & [Formulare]![frmQuartettSuche]![txtHaendler] & " * ")) " _
& "ORDER BY tblSpiele.SpielNr"
   Me.RecordSource = strsql
End Sub
Führe ich den Code jetzt aus, dann meckert er eben Laufzeitfehler 13 --> Typen unverträglich, das debuggen markiert dann den ganzen Teil ab strsql = bis zum ende des Order by.
Es ist bis auf die Änderung der Order der gleiche SQL Code, die der Query zugrunde liegt. Da er beim ersten Ausführen die "" bei tblBildmotive.Bildmotiv) = "Deckblatt (DB)" OR (tblBildmotive.Bildmotiv) = "Schachtel-DB") anmeckerte, und nach entfernen nicht mehr, dachte ich schon, es liegt an den vielen "*" etc. in der Where Anweisung. Aber dem ist nicht so. Was ist falsch und wer kann mir da helfen?

Gruß Andreas
Grüße und Dank im voraus
Andreas
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 854
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #1 am: September 19, 2017, 22:29:38 »
Im gebundenen Formular kannst Du die OrderBy-Eigenschaft setzen und mit OrderByOn die Sortierung an- oder abschalten.
Grüße von der (⌒▽⌒)
 

Offline derilzemer

  • Access-Meister
  • ***
  • Beiträge: 544
    • Quartettportal
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #2 am: September 19, 2017, 23:07:28 »
Hallo Lachtaube,
ich verstehe es nicht ganz :(.
Du meinst also in den Eigenschaften des Formular --> Daten --> Beim Laden sortieren Ja oder nein oder ist das ein Zusatz, den ich im VBA setzen muss? Wenn ich den dort setze, dann ist der doch "fix", was ich ja nicht will, oder??
Wenn ich dazu etwas auf den DonKarls Access Seiten lese http://www.donkarl.com/FAQ/FAQ4Formulare.htm, 4.7 Sortierung im Formular ändern, selbst dann blick ich es nicht :(.Er verweist eigentlich auf die SQL Variante, welche ich zu nutzen versuche. Kannst du mich ein wenig mehr "drauf stupsen"?

Gruß Andreas
Grüße und Dank im voraus
Andreas
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 854
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #3 am: September 20, 2017, 01:18:59 »
Andreas, Du wirst es kaum glauben, aber beide Eigenschaften lassen sich während das Formular angezeigt wird, mittels VBA oder Makros zuweisen, was übrigens für fast alle Eigenschaften gilt, ohne sie im Entwurf speichern zu müssen.

Irgendwo in den Unweiten Deines VBA-Formularcode steht dann:   Me.OrderBy = "SpieleNr" 'oder "SpieleNr DESC"
   Me.OrderByOn = True

   'oder
   Me.OrderBy = "AusgabeJahr, OriginalPreis DESC"
   Me.OrderByOn = True
Diese Information kann auch bei Don Karl nachgelesen werden. Über dir Wirkung von Prefessionalität kann man getelter Meinung sein, und wenn man beim Entladen den Wert auf vbNullString setzt, wird auch nichts gespeichert, egal welche Einstellung im Formular vorliegt.

Wo ist das Problem?
« Letzte Änderung: September 20, 2017, 01:26:09 von Lachtaube »
Grüße von der (⌒▽⌒)
 

Offline derilzemer

  • Access-Meister
  • ***
  • Beiträge: 544
    • Quartettportal
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #4 am: September 20, 2017, 11:27:53 »
Hi,
das Problem ist, dass ich nun mal etwas schwer von Begriff bin, da wirst auch du leider nichts mehr dran ändern können :(.
Ich hab das jetzt hinbekommen, aber hab ein Folgeproblem dadurch. Ich versuche es mal verständlich zu erklären. Das frmQuartettSuche wird ja mit einer qryQuartettSuche befüttert. Der SQL String hat zum  Abschluss einen ORDER BY SpielID. Ich habe jetzt beim Spaltenlabel der SpielNr als Ereignis beim klicken folgendes hinzugefügt:
Private Sub lblSpielNr_Click()
    Me.OrderBy = "SpielNr"
    Me.OrderByOn = True
End Sub
Solange ich True als OrderByOn habe, ist das Problem dass Access den Filter beim erneuten öffnen wieder anwendet. Also habe ich noch zusätzlich beim laden des Formular folgendes gesetzt:
Private Sub Form_Load()
    Me.OrderBy = "SpielID"
    Me.OrderByOn = True
End Sub
Aber es ist noch eine Funktion, wie ich nicht weiß, wie ich das löse. Ich kann im Suchformular alle Suchfelder mit einem Commandbutton zurücksetzen.
Private Sub cmdFilterloeschen_Click()
    Me.cboKategorieSuche = ""
    Me.cboSerienSuche = ""
    Me.cboVerlagSuche = ""
    Me.txtSpieleNr = ""
    Me.txtSpielTitel = ""
    Me.txtPreisFilter = ""
    Me.txtAusgabejahr = ""
    Me.txtHaendler = ""
    Me.Requery
End Sub
Betätige ich diesen, nachdem ich eine Sortierung der SpielNr gemacht habe, dann wendet er logischerweise auch den Filter beim anzeigen aller Datensätze wieder an. Ich muss also in diesem Zurücksetzen einen Event mit einbauen, einen reload der Form, oder? Ein Me.refresh brachte keine Lösung. Wie bekomme ich das hin?

Gruß Andreas
Grüße und Dank im voraus
Andreas
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 854
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #5 am: September 20, 2017, 11:38:14 »
Ich kann Dir bei  der Ausführung zu dem Knopf gedanklich nicht folgen. Was passiert und was soll passieren?

Nur soviel: Steuerelemente setzt man auf Null und nicht auf "".
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: derilzemer

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23095
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #6 am: September 20, 2017, 11:43:15 »
Hallo,

Zitat
den Filter beim erneuten öffnen wieder

dafür gibt es das Form-Eigenschaft "Beim Laden sortieren"..


 
Zitat
in diesem Zurücksetzen einen Event mit einbauen

Der "Event" könnte heißen:  Nach nichts sortieren....


Me.Orderby = ""
Me.OrderbyOn = True


wobei es sinnvoller wäre, nach dem Ausgangs-(Anfangs-)zustand zu sortieren

oder gleich ein Me.Requery abzusetzen.

Offline derilzemer

  • Access-Meister
  • ***
  • Beiträge: 544
    • Quartettportal
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #7 am: September 20, 2017, 12:37:20 »
Hi,
Nur soviel: Steuerelemente setzt man auf Null und nicht auf "".
Den Hinweis mit "" auf Null habe ich abgeändert, danke.
Ich kann Dir bei  der Ausführung zu dem Knopf gedanklich nicht folgen. Was passiert und was soll passieren?
Dieser von dir betitelte Knopf soll nur die Suchfilter, welche ich während einer Suche nach Verlag, oder Preis etc setze zurücksetzen, eben auf Null. Aber dann zieht nicht die ursprüngliche OrderBy SpielID, da ich in der vorherigen Suche nach SpielNr sortiert habe. Wenn ich das mache, dann zeigt er wieder alle Datensätze an, aber sortiert nach SpielNr., was ich nciht will! Es soll dann wieder der Ursprung, OrderBy SpielID, aktiv sein. Genau das muss ich in die "knopfaktion" reinbringen, muss passieren, da ich ja das Formular nicht schließen und wieder öffnen will um das zu erreichen.
Me.Requery wie Franz es aufführt habe ich ja schon drin in der "Knopfaktion". Hmmm ist das jetzt verständlich gewesen?

Gruß Andreas
Grüße und Dank im voraus
Andreas
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1600
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #8 am: September 20, 2017, 12:55:37 »
Hallo Andreas,
Zitat
Me.Requery wie Franz es aufführt habe ich ja schon drin in der "Knopfaktion".
Und was hindert dich daran die Neusortierung da auch unterzubringen?
I-Ü. würde ich das Sortieren in eine Sub auslagern, da du es ja an
verschiedenen Stellen im Formular benötigst.
Private Sub SortiereForm( _
                      Optional ByVal Sortierfeld As String = "")
    Me.OrderBy = Sortierfeld
    Me.OrderByOn = True
End Sub
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline derilzemer

  • Access-Meister
  • ***
  • Beiträge: 544
    • Quartettportal
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #9 am: September 20, 2017, 13:39:40 »
Hi Ekkehard,
Zitat
Me.Requery wie Franz es aufführt habe ich ja schon drin in der "Knopfaktion".
Und was hindert dich daran die Neusortierung da auch unterzubringen?
Ja nix, ist ja genau meine Frage, ich bekomme es ja nur nicht hin :(. Wenn ich jetzt diese Knopfaktion erweitere
Private Sub cmdFilterloeschen_Click()
    Me.cboKategorieSuche = Null
    Me.cboSerienSuche = Null
    Me.cboVerlagSuche = Null
    Me.txtSpieleNr = Null
    Me.txtSpielTitel = Null
    Me.txtPreisFilter = Null
    Me.txtAusgabejahr = Null
    Me.txtHaendler = Null
    Me.Requery
    Me.OrderBy = Me.SpielID
    Me.OrderByOn = True
End Sub
dann meckert er Laufzeitfehler 3709 an, dass "Der Suchschlüssel in keinem Datensatz gefunden wurde", der Debugger springt dann genau zu Me.OrderBy = Me.SpielID. Was ist das Problem?

I-Ü. würde ich das Sortieren in eine Sub auslagern, da du es ja an
verschiedenen Stellen im Formular benötigst.
Private Sub SortiereForm( _
                      Optional ByVal Sortierfeld As String = "")
    Me.OrderBy = Sortierfeld
    Me.OrderByOn = True
End Sub
Das auslagern habe ich ja gemacht, es geht mir lediglich noch um die Sortierung nach dem Zurücksetzen der Suchkriterien. Da ist es wohl am geschicktesten, man bringt es mit in die Aktion des Zurücksetzens mit rein.

Gruß Andreas
Grüße und Dank im voraus
Andreas
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 854
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #10 am: September 20, 2017, 14:17:21 »
Dass in OrderBy ein Text in Form eines vorhandenen Feldnamens oder die Positionszahl einer vorhandenen Spalte stehen muss, hast Du verstanden?

"1" sortiert aufsteigend nach der ersten Spalte, egal wie sie heißt.
"1 DESC" auch - nur halt absteigend.
"2" nach der zweiten Spalte, usw. und
"4711" führt zur Fehlermeldung, weil es nicht soviele Spalten gibt.

Wenn man aber "SpielID", statt es dem Zufall zu überlassen, zuweist, dürfte die Aussicht auf Erfolg größer sein. :)
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: derilzemer

Offline derilzemer

  • Access-Meister
  • ***
  • Beiträge: 544
    • Quartettportal
Re: Laufzeitfehler 13 --> Typen unverträglich
« Antwort #11 am: September 20, 2017, 14:29:59 »
Hi,
Dass in OrderBy ein Text in Form eines vorhandenen Feldnamens oder die Positionszahl einer vorhandenen Spalte stehen muss, hast Du verstanden?
wenn du den Satz so anfängst, dann gehe ich davon aus, dass du der Meinung bist dass ich es wohl nicht verstanden habe, auch wenn ich schon der Meinung bin :(.

"1" sortiert aufsteigend nach der ersten Spalte, egal wie sie heißt.
"1 DESC" auch - nur halt absteigend.
"2" nach der zweiten Spalte, usw. und
"4711" führt zur Fehlermeldung, weil es nicht soviele Spalten gibt.
Wenn man aber "SpielID", statt es dem Zufall zu überlassen, zuweist, dürfte die Aussicht auf Erfolg größer sein. :)
Genau da hatte ich meinen Fehler, ich hatte zwar das Feld aber die Quotas vergessen :(. Ich habe es von Me.OrderBy = Me.SpielID auf Me.OrderBy = "SpielID" umgestellt und schon funktioniert es. Zuvor habe ich das mit der "1" gemacht, das hat natürlich auch funktioniert. Wusste ich nicht, dass ich auch nach Spaltennumer sortieren kann. Okay, danke für die Geduld.

Gruß Andreas
Grüße und Dank im voraus
Andreas