| |
| Materialien für den 3D-Druck im Hochtemperaturbereich, eine Pressemitteilung
|
Autor
|
Thema: VBA, Datensätze suchen (19159 mal gelesen)
|
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: ..
|
erstellt am: 14. Feb. 2007 22:09 <-- editieren / zitieren --> Unities abgeben:
Hallo, beim verlassen des Feldes JG der TAB1 im Formular starte ich eine VBA Procedur dort erhält die Variable WERT_JG den Wert des Feldes JG der TAB1(aktive Tabelle) WERT_JG = Me!JG nun möchte ich abtesten ob es in der TAB2 Datensätze gibt bei welchem der Wert des Feldes GEB = WERT_JG ist Wenn kein Datensatz gefunden wird dann eine Meldung Wenn mehr als ein Datensatz gefunden wird dann eine andere Meldung Wenn nur ein Datensatz gefunden wird dann soll eine Variable WERT_KL = den Wert aus dem Feld KL dieses Datensatzes der TAB2 erhalten Recordset? wäre schön, wenn ihr mir da weiterhelfen könntet ------------------ Servus, Mario www.the-skier.de [Diese Nachricht wurde von m-troeger am 14. Feb. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 15. Feb. 2007 13:53 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
Hallo Mario, sowas in der Art sollte Dir weiterhelfen ...
Code: Option ExplicitSub test() Dim dbs As Object Set dbs = CurrentDb Dim strSQL As String strSQL = "SELECT count(Tabelle1.value) FROM Tabelle1 WHERE Tabelle1.value = 'testers';" Dim rst As Object Set rst = dbs.OpenRecordset(strSQL) '' hier kommt immer die Anzahl zurück, auch wenn nur '0' drinnensteht Dim sCountValue As String sCountValue = rst.Fields.Item(0).Value Select Case sCountValue Case "0" '' mache dies Case "1" '' mache das Case Else '' mache jenes End Select Set rst = Nothing Set dbs = Nothing End Sub
Grüssle Lars ------------------ "Soll es funktionieren oder darf es auch etwas von Siemens sein?" ... http://validator.w3.org/check?uri=http://ww3.cad.de/cgi-bin/ubb/Ultimate.cgi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: ..
|
erstellt am: 15. Feb. 2007 19:01 <-- editieren / zitieren --> Unities abgeben:
Danke Lars, das Funktioniert ersmal wunderbar folgende Zeile nochmal zum besseren Verständnis
Code:
strSQL = "SELECT count(Tabellenname.Feldname) FROM Tabellenname WHERE Tabellenname.Feldname = 'Suchwert';"
wenn ich das so richtig verstanden habenun aber noch bei Case "1" Zitat: Wenn nur ein Datensatz gefunden wird dann soll eine Variable WERT_KL = den Wert aus dem Feld KL dieses Datensatzes der TAB2 erhalten
hier möchte ich den Wert aus Feld KL des gefundenen Datensatzes lesen
------------------ Servus, Mario www.the-skier.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 20. Feb. 2007 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
ungetestet - sollte aber funktionieren! Code: Option ExplicitSub test() Dim dbs As Object Set dbs = CurrentDb Dim strSQL As String strSQL = "SELECT count(Tabellenname.Feldname), Tabellenname.KL FROM Tabellenname WHERE Tabellenname.Feldname = 'Suchwert';" Dim rst As Object Set rst = dbs.OpenRecordset(strSQL) '' hier kommt immer die Anzahl zurück, auch wenn nur '0' drinnensteht Dim sCountValue As String sCountValue = rst.Fields.Item(0).Value Select Case sCountValue Case "0" '' mache dies Case "1" '' mache das Dim WERT_KL as String WERT_KL = CStr(rst.Fields.Item(1).Value) Case Else '' mache jenes End Select Set rst = Nothing Set dbs = Nothing End Sub
Grüssle Lars ------------------ "Soll es funktionieren oder darf es auch etwas von Siemens sein?" ... http://validator.w3.org/check?uri=http://ww3.cad.de/cgi-bin/ubb/Ultimate.cgi [Diese Nachricht wurde von BloodyMess am 20. Feb. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: ..
|
erstellt am: 20. Feb. 2007 19:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Lars, bin jetzt zu folgender Lösung gekommen Code:
Option Explicit Sub test()Dim dbs As Object Set dbs = CurrentDb Dim strSQL As String strSQL = "SELECT count(Tabellenname.Feldname) FROM Tabellenname WHERE Tabellenname.Feldname = 'Suchwert';" Dim rst As Object Set rst = dbs.OpenRecordset(strSQL) '' hier kommt immer die Anzahl zurück, auch wenn nur '0' drinnensteht Dim sCountValue As String sCountValue = rst.Fields.Item(0).Value Select Case sCountValue Case "0" '' mache dies Case "1" '' mache das Dim WERT_KL as String WERT_KL = DLookup("[Feldname]", "Tabellenname") Case Else '' mache jenes End Select Set rst = Nothing Set dbs = Nothing End Sub
------------------ Servus, Mario www.the-skier.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 21. Feb. 2007 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: ..
|
erstellt am: 21. Feb. 2007 21:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Lars, Code: strSQL = "SELECT count(Tabellenname.Feldname), Tabellenname.KL FROM Tabellenname WHERE Tabellenname.Feldname = 'Suchwert';"
funktioniert bei mir aber nicht, Fehler 3122Sie wollten eine Abfrage ausführen, die den angegebenen Ausdruck nicht als Teil der Aggregatfunktion einschließt.
------------------ Servus, Mario www.the-skier.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 22. Feb. 2007 16:58 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: ..
|
erstellt am: 22. Feb. 2007 21:14 <-- editieren / zitieren --> Unities abgeben:
|
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 22. Feb. 2007 23:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Lars, ich habs nun fast Formular KLASSE funktioniert jetzt neuer Code
Code:
' in VBA Formular FRM_KLASSE Private Sub BTN_JGBERECHNEN_Click() Dim JAHR, ALTERJ, ALTERAE As Variant Dim MEID As Single MEID = Me!ID JAHR = FRM_KLASSE_TXT_JAHR.Value ALTERJ = FRM_KLASSE_TXT_ALTERJ.Value ALTERAE = FRM_KLASSE_TXT_ALTERAE.ValueIf ALTERAE <> "" And ALTERJ <> "" And JAHR <> "" Then ALTERJ = JAHR - ALTERJ ALTERAE = JAHR - ALTERAE Dim s1, s2 As String s1 = "Update KLASSE SET JG_von = " & ALTERJ & " WHERE ID= " & MEID & " " s2 = "Update KLASSE SET JG_bis = " & ALTERAE & " WHERE ID= " & MEID & " " DoCmd.SetWarnings False DoCmd.RunSQL s1 DoCmd.RunSQL s2 DoCmd.SetWarnings True Else MsgBox "Es konnte kein Jahrgang berechnet werden. Prüfen Sie Ihre Eingaben!, vbOKOnly" End If End Sub
einige neue Codzeilen im Formular STARTER
Code:
strSQL = "SELECT count(KLASSE.KLASSE),KLASSE.KLASSE FROM KLASSE WHERE KLASSE.JG_von <= '" & WERT_JG & "' AND KLASSE.JG_bis >= '" & WERT_JG & "' And KLASSE.SEX = '" & WERT_JG_SEX & "' GROUP by KLASSE.KLASSE ; " Dim rst As Object Set rst = dbs.OpenRecordset(strSQL) '' hier kommt immer die Anzahl zurück, auch wenn nur '0' drinnensteht Dim sCountValue As String sCountValue = rst.Fields.Item(0).Value Select Case sCountValue Case "0" MsgBox "Kein DS gefunden, prüfen Sie die Klassenzuordnung", vbOKOnly Case "1" ' Hier soll der WERT von KLASSE.SEX in das Feld KLASSE des aktuellen DS schreiben werden WERT_KL = CStr(rst.Fields.Item(1).Value) Dim s1 As String Me!KLASSE = WERT_KL Case Else MsgBox "Mehr DS gefunden, prüfen Sie die Klassenzuordnung", vbOKOnly End Select
wenn ich nun aber ein anderes Feld im Formular STARTER editiere tritt ein neuer Fehler auf Der Suchschlüssel wurde in keinem Datensatz gefunden. (Fehler 3709) Dieser Fehler tritt auf, wenn eine ISAM SEEK ausgeführt wird und sich keine übereinstimmenden Werte im Index befinden. Vielleicht habe ich durch die Bastelei aber auch irgend nen Mist in die Tabelle gehauen, besser ich mach sie nochmal neu.
------------------ Servus, Mario www.the-skier.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 23. Feb. 2007 20:42 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 25. Feb. 2007 21:44 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: ..
|
erstellt am: 26. Feb. 2007 15:14 <-- editieren / zitieren --> Unities abgeben:
Hallo Lars, vielen Dank, nun hast du dir auch noch das WE versaut. Ich habe am WE leider keinen PC (Pendler). Mit dem lernen von DB und Prog. hast du ja recht, aber mir fehlt derzeit noch etwas Lektüre, und so sehr oft benötige ich DB's auch nicht. Ich werde mich nun aber mit deinem Code auseinander setzen. ich denke ich werde dadurch net dümmer. vielen Dank nochmals
------------------ Servus, Mario www.the-skier.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 19. Mrz. 2007 22:43 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe nun im Formular FRM_STARTER noc etwas geändert, um mir ein recordset zu sparen Code alt:
Code: '' in die tabelle klasse schauen, ob das geburtsjahr irgendwo in die definition reinpasst Dim dbs As Object Set dbs = CurrentDbDim strSQL As String strSQL = "SELECT count(klasse.jg_von) " & _ "FROM klasse " & _ "WHERE klasse.jg_von <= '" & sJahrgang & "' " & _ "AND klasse.jg_bis >= '" & sJahrgang & "' " & _ "AND klasse.sex = '" & sGeschlecht & "';" Dim rst As Object Set rst = dbs.OpenRecordset(strSQL) '' hier kommt immer die Anzahl zurück, auch wenn nur '0' drinnensteht Dim sCountValue As String sCountValue = rst.Fields.Item(0).Value Select Case sCountValue Case "0" MsgBox "Es gibt keine entsprechende Klasse!", vbCritical, "E R R O R" Case "1" '' hole dir die Klasse strSQL = "SELECT klasse.klasse " & _ "FROM klasse " & _ "WHERE klasse.jg_von <= '" & sJahrgang & "' " & _ "AND klasse.jg_bis >= '" & sJahrgang & "' " & _ "AND klasse.sex = '" & sGeschlecht & "';" Set rst = dbs.OpenRecordset(strSQL) Dim sKlasse As String sKlasse = rst.Fields.Item(0).Value '' mache ein update auf den datensatz Dim sId As String sId = Me.ID strSQL = "UPDATE starter SET klasse = '" & sKlasse & "' WHERE ID = " & sId & ";" DoCmd.RunSQL (strSQL) DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70 Case Else MsgBox "Es gibt mehrere identische Klassen!", vbCritical, "E R R O R" End Select Set rst = Nothing Set dbs = Nothing
Code neu:
Code: '' in die tabelle klasse schauen, ob das geburtsjahr irgendwo in die definition reinpasst Dim dbs As DAO.Database Set dbs = CurrentDbDim strSQL As String strSQL = "SELECT * FROM klasse " & _ "WHERE klasse.jg_von <= '" & sJahrgang & "' " & _ "AND klasse.jg_bis >= '" & sJahrgang & "' " & _ "AND klasse.sex = '" & sGeschlecht & "';" Dim rst As DAO.Recordset Set rst = dbs.OpenRecordset(strSQL) Dim rst_count As Variant If Not rst.BOF Then 'nur wenn überhaupt DS vorhanden sind rst.MoveLast 'wichtig, um die korrekte Anzahl an DS zu erhalten 'MsgBox rst.RecordCount If rst.RecordCount = 1 Then Dim sKlasse As String sKlasse = rst.Fields.Item(1).Value '' mache ein update auf den datensatz Dim sId As String sId = Me.ID strSQL = "UPDATE starter SET klasse = '" & sKlasse & "' WHERE ID = " & sId & ";" DoCmd.RunSQL (strSQL) DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70 Else MsgBox "Es gibt mehrere identische Klassen!", vbCritical, "E R R O R" End If Else MsgBox "Es wurde keine entsprechnde Klasse gefunden!", vbCritical, "E R R O R" End If Set rst = Nothing Set dbs = Nothing
------------------ Servus, Mario www.the-skier.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Facility Manager (m/w/d) | GEA ist einer der größten Systemanbieter für die nahrungsmittelverarbeitende Industrie sowie ein breites Spektrum weiterer Branchen mit einem Konzernumsatz von rund 5,2 Milliarden Euro in 2022. Das international tätige Technologieunternehmen konzentriert sich auf Maschinen und Anlagen sowie auf Prozesstechnik und Komponenten. Darüber hinaus bietet GEA nachhaltige Lösungen für anspruchsvolle Produktionsverfahren in unterschiedlichen Endmärkten und hält ein umfassendes Serviceportfolio bereit.... | Anzeige ansehen | Elektrotechnik, Elektronik |
|
BloodyMess Mitglied Applicationingenieur
Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 20. Mrz. 2007 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|