netghost: Prüfen ob item in werte liste

Hi,

ich habe zwei recordsets und will nun schauen ob der feldname aus rs1 in rs2 vorkommt. Weiß jemand ob es dafür einen Befehl gibt in der art von:

For each flditem in rs1.fields
     if flditem.name in rs2.fields then
          'ok
     end if
next

mit zwei for each schleifen kriege ich das hin, finde es aber nicht gut.

Gruß

Netghost

  1. Hallo Netghost,

    eine solche von Dir gewünschte Funktion gibt es nicht.

    Du könntest höchstens ein Konstrukt bauen, in dem Du für
    jedes Feld von rs1 versuchst den Wert des entsprechenden
    Feldes in rs2 zu ermitteln und mögliche Fehler entsprechend abfängst

    z.B.

    Dim test as Variant
    For Each flditem in rs1.Fields
      On Error resume next
      test=rs2(flditem.name)
      if errors.count>0 then
       'Fehlerbehandlung
      End If
    Next

    Gruß Ralf

    1. Hi Ralf,

      Danke zunächst mal. Über errorhandling habe ich auch nachgedacht, aber es ist so daß wenn das feld nicht in rs2 ist ich eigentlich nichts tun will und zum nächsten feld weitergehe.

      Habe es mit zwei schleifen gemacht, fand es nur nicht so gut.

      for each flditem1 in rs1.fields
           for each flditem2 in rs2.fields
                if flditem1.name = flditem2.name
                     ctrl = "ok"
                end if
           next
      next

      Gruß
      Netghost

      1. Hi Netghost,

        Danke zunächst mal. Über errorhandling habe ich auch nachgedacht, aber es ist so daß wenn das feld nicht in rs2 ist ich eigentlich nichts tun will und zum nächsten feld weitergehe.

        das passiert bei der von Ralf vorgeschlagenen Lösung auch. Durch das on error resume next wird einfach zur nächsten Zeile weiter gegangen, wo du halt nachschaust, ob es einen Fehler gab.

        for each flditem1 in rs1.fields
             for each flditem2 in rs2.fields
                  if flditem1.name = flditem2.name
                       ctrl = "ok"
                  end if
             next
        next

        Funktioniert prinzipell, ist aber arge Verschwendung von Performance, weil du die innere Schleife für jeden Wert der äußeren nochmal komplett durchläufst.

        Gruß,
        Martin

        1. Hi Martin,

          Funktioniert prinzipell, ist aber arge Verschwendung von Performance, weil du die innere Schleife für jeden Wert der äußeren nochmal komplett durchläufst.

          Ja diese Lösung ist nicht sehr freundlich zur performance. Ok es werden vielleicht max 500 Datensätze a 50 Feldern eingelesen, das ganze läuft auch noch lokal ab, also nicht übers internet. Trotzdem dauert es merklich lange bis die prüfung abgeschlossen ist, deswegen falls jemand eine bessere Lösung weiss, ich bin offen

          Gruß
          Netghost

          1. Hi Netghost,

            Trotzdem dauert es merklich lange bis die prüfung abgeschlossen ist, deswegen falls jemand eine bessere Lösung weiss, ich bin offen

            na die von Ralf. Auch wenn es ein paar Zeichen mehr zu tippen sind.

            Gruß,
            Martin