Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Gute Adresssuche / Alternativsuche / Neuerstellung
zurück: Anmeldungen aus dem SQL-Server als Sicht / View? weiter: Maximale Zeilenzahl bei Transfer nach Excel Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Offen Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
stefaktiv
Im Profil kannst Du frei den Rang ändern


Verfasst am:
22. Sep 2013, 14:31
Rufname:


Gute Adresssuche / Alternativsuche / Neuerstellung - Gute Adresssuche / Alternativsuche / Neuerstellung

Nach oben
       Version: Office 2013

stefaktiv am 21. Sep 2013 um 00:11 hat folgendes geschrieben:
Hallo,

ich habe in meiner Datenbank eine Tabelle für Adressen:
Code:
CREATE TABLE [dbo].[Adressen](
   [Adr_ID] [int] IDENTITY(1,1) NOT NULL,
   [Adr_Straße] [nvarchar](255) NULL,
   [Adr_Nr_von] [int] NULL,
   [Adr_Nr_bis] [int] NULL,
   [Adr_Buchstabe] [nvarchar](10) NULL,
   [Adr_PLZ] [nvarchar](12) NULL,
   [Adr_Ort] [nvarchar](150) NULL,
   [Adr_Land] [nvarchar](100) NULL,
   [Adr_Zusatz] [nvarchar](255) NULL,
   [Adr_aktuell] [bit] NOT NULL,
   [Adr_Newslettersperre] [bit] NOT NULL,
   [Adr_Quelle] [nvarchar](100) NULL,
   [Adr_Anlagedatum] [datetime] NULL,
   [Adr_angelegt_durch] [nvarchar](150) NULL,
   [Adr_Letzte_Änderung] [datetime] NULL,
   [Adr_geändert_durch] [nvarchar](150) NULL,
   [Adr_Timestamp] [timestamp] NULL,
 CONSTRAINT [PK_Adressen] PRIMARY KEY CLUSTERED
(
   [Adr_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Adressen] ADD  CONSTRAINT [DF_Adressen_Adr_aktuell]  DEFAULT ((1)) FOR [Adr_aktuell]
GO

ALTER TABLE [dbo].[Adressen] ADD  CONSTRAINT [DF_Adressen_Adr_Newslettersperre]  DEFAULT ((0)) FOR [Adr_Newslettersperre]
GO
Zusätzlich gibt es noch eine Tabelle, mit der man die Verknüpfungen zwischen Person und Adresse realisiert.

Zum Verknüpfen einer Person mit einer Adresse gibt es eine Suchmaske. In der können beliebige Teile der Adresse eingetragen werden. Eine Suche mit Platzhaltern ("*") ist möglich.

Bis dato hatte ich mir eine recht komplizierte Funktion zusammengebastelt. Die stellte zum einen einen Suchstring ("AND") zusammen, zum anderen einen alternativen Suchstring ("OR").

Nachdem ich gerade von VBA in Richtung SQL-Server migriere, suche ich jetzt eine gute Lösung für die Frage der Suche nach einem Datensatz.

Dabei soll eine Stored Procedure folgende Schritte übernehmen:
  1. Übergabe aller Suchparameter durch VBA (ADO) an den SQL Server
  2. Suche nach den Parametern (* als LIKE mit %)
  3. Falls Treffer vorliegen: Recordset zurückgeben
  4. Falls keine Treffer vorliegen: alternative Suche mit diversen Varianten (keine reine OR-Verknüpfung mehr, da diese zu viele unrelevante Treffer brachte)
  5. Falls Treffer vorliegen: Ausgabe als Recordset mit Merker für alternative Suche
  6. Falls keine Treffer vorliegen: neuen Datensatz anlegen und vorhandene Suchbegriffe eintragen
  7. Neuen Datensatz als Recordset zurückgeben
Meine aktuelle Lösung sieht so aus:

Code:
CREATE PROCEDURE [dbo].[Prod_Suche_Adressen]
           
      @intAdr_ID            int               = NULL,
      @strAdr_Straße         varchar(50)         = NULL,
      @intAdr_Nr_von         int               = NULL,
      @intAdr_Nr_bis         int               = NULL,
      @strAdr_Buchstabe      varchar(10)         = NULL,
      @strAdr_PLZ            varchar(10)         = NULL,
      @strAdr_Ort            varchar(50)         = NULL,
      @strAdr_Land         varchar(50)         = NULL,
      @strAdr_Zusatz         varchar(50)         = NULL,
      @bAdr_aktuell         bit               = NULL,
      @strBenutzername      varchar(50)         = NULL,
      @bAdresse_anlegen      bit               = NULL,
      @bAlternativtreffer      int               OUTPUT,
      @intAdr_ID_neu         int               OUTPUT

AS

-- Prüfen, ob ein regulärer Treffer erzielt werden kann
IF (SELECT COUNT(*)
    FROM [Adressen]
   WHERE   (Adr_ID = @intAdr_ID OR @intAdr_ID IS NULL)
      AND      (Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)       
      AND      (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)
      AND      (Adr_Nr_bis = @intAdr_Nr_bis OR @intAdr_Nr_bis IS NULL)
      AND      (Adr_Buchstabe = @strAdr_Buchstabe OR @strAdr_Buchstabe IS NULL)
      AND      (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
      AND      (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL)
      AND      (Adr_Land LIKE [dbo].[Suchstring](@strAdr_Land)  OR @strAdr_Land IS NULL)
      AND      (Adr_Zusatz LIKE [dbo].[Suchstring](@strAdr_Zusatz)  OR @strAdr_Zusatz IS NULL)
      AND      (Adr_aktuell = @bAdr_aktuell OR @bAdr_aktuell IS NULL)) > 0
   
   -- Es liegt ein regulärer Treffer vor - entsprechendes Recordset laden
   BEGIN
         
         Set @bAlternativtreffer = 0

         SELECT Adr_ID, Adr_Straße, Adr_Nr_von, Adr_Nr_bis, Adr_Buchstabe, Adr_PLZ, Adr_Ort, Adr_Land
            
         FROM  [Adressen]
         
         WHERE (Adr_ID = @intAdr_ID OR @intAdr_ID IS NULL)
                   
               AND  (Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)       
                      
               AND  (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)
                      
               AND  (Adr_Nr_bis = @intAdr_Nr_bis OR @intAdr_Nr_bis IS NULL)
                      
               AND  (Adr_Buchstabe = @strAdr_Buchstabe OR @strAdr_Buchstabe IS NULL)
                      
               AND  (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
                      
               AND  (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL)

               AND  (Adr_Land LIKE [dbo].[Suchstring](@strAdr_Land)  OR @strAdr_Land IS NULL)

               AND  (Adr_Zusatz LIKE [dbo].[Suchstring](@strAdr_Zusatz)  OR @strAdr_Zusatz IS NULL)
       
               AND  (Adr_aktuell = @bAdr_aktuell OR @bAdr_aktuell IS NULL)

        OPTION (RECOMPILE)

      END
   
   -- Es liegt kein regulärer Treffer vor - Alternativsuche starten
   ELSE

   BEGIN

       Set @bAlternativtreffer = -1

       IF @strAdr_Straße IS NOT NULL AND @intAdr_Nr_von IS NOT NULL AND @strAdr_PLZ IS NOT NULL  AND @strAdr_Ort IS NOT NULL
         
         BEGIN
                  
              IF (SELECT COUNT(*)
                      FROM [Adressen]
                      WHERE   
                      ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                   AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
                       AND (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL))
                       OR
                     ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                       AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
                       AND (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL))
                       OR
                     ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                       AND (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)                 
                       AND (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL))
                       OR
                ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                       AND (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)
                  AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL))
                       OR
                     ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL)
                       AND (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)
                  AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
                       AND (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL))
                       OR
                     ((Adr_Straße LIKE [dbo].[Suchstring_Alternativ](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                       AND (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)
                  AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
                       AND (Adr_Ort LIKE [dbo].[Suchstring_Alternativ](@strAdr_Ort)  OR @strAdr_Ort IS NULL))) > 0

              BEGIN   
                       
                        SELECT Adr_ID, Adr_Straße, Adr_Nr_von, Adr_Nr_bis, Adr_Buchstabe, Adr_PLZ, Adr_Ort, Adr_Land
               
                        FROM  [Adressen]
           
                        WHERE   
                        ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                   AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
                       AND (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL))
                       OR
                     ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                       AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
                       AND (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL))
                       OR
                     ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                       AND (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)                 
                       AND (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL))
                       OR
                ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                       AND (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)
                  AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL))
                       OR
                     ((Adr_Straße LIKE [dbo].[Suchstring](@strAdr_Ort)  OR @strAdr_Ort IS NULL)
                       AND (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)
                  AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
                       AND (Adr_Ort LIKE [dbo].[Suchstring](@strAdr_Straße)  OR @strAdr_Straße IS NULL))
                       OR
                     ((Adr_Straße LIKE [dbo].[Suchstring_Alternativ](@strAdr_Straße)  OR @strAdr_Straße IS NULL)
                       AND (Adr_Nr_von = @intAdr_Nr_von OR @intAdr_Nr_von IS NULL)
                  AND (Adr_PLZ LIKE [dbo].[Suchstring](@strAdr_PLZ)  OR @strAdr_PLZ IS NULL)
                       AND (Adr_Ort LIKE [dbo].[Suchstring_Alternativ](@strAdr_Ort)  OR @strAdr_Ort IS NULL))
           
                   OPTION (RECOMPILE)

                 END
           
         -- Auch die Alternativsuche bringt kein Ergebnis ggf. neuen Datensatz
          ELSE

         If @bAdresse_anlegen <> 0
 
               BEGIN
         
                   INSERT INTO Adressen(Adr_Straße, Adr_Nr_von, Adr_Nr_bis, Adr_Buchstabe, Adr_PLZ,
                                 Adr_Ort, Adr_Land, Adr_Zusatz, Adr_aktuell, Adr_Anlagedatum,
                             Adr_angelegt_durch, Adr_Letzte_Änderung, Adr_geändert_durch)
         
                   VALUES (@strAdr_Straße, @intAdr_Nr_von, @intAdr_Nr_bis, @strAdr_Buchstabe, @strAdr_PLZ,
                           @strAdr_Ort, @strAdr_Land, @strAdr_Zusatz, -1, CONVERT(DATE, GETDATE()), @strBenutzername,
                         CONVERT(DATE, GETDATE()), @strBenutzername)
   
                     -- Die ID des neu erstellten Datensatzes holen
                SET @intAdr_ID_neu = SCOPE_IDENTITY();   

                -- Jetzt neu erstellten Datensatz als Recordset laden
                SELECT Adr_ID, Adr_Straße, Adr_Nr_von, Adr_Nr_bis, Adr_Buchstabe, Adr_PLZ, Adr_Ort, Adr_Land
                FROM [Adressen]
                     WHERE Adr_ID=@intAdr_ID_neu

                END
               
            ELSE

            BEGIN
                       
                     SELECT Adr_ID, Adr_Straße, Adr_Nr_von, Adr_Nr_bis, Adr_Buchstabe, Adr_PLZ, Adr_Ort, Adr_Land
               
                     FROM  [Adressen]
           
                     WHERE Adr_ID=0

                     END
              END

         ELSE

         BEGIN

              If @bAdresse_anlegen <> 0
 
                     BEGIN
         
                   INSERT INTO Adressen(Adr_Straße, Adr_Nr_von, Adr_Nr_bis, Adr_Buchstabe, Adr_PLZ,
                                 Adr_Ort, Adr_Land, Adr_Zusatz, Adr_aktuell, Adr_Anlagedatum,
                             Adr_angelegt_durch, Adr_Letzte_Änderung, Adr_geändert_durch)
         
                   VALUES (@strAdr_Straße, @intAdr_Nr_von, @intAdr_Nr_bis, @strAdr_Buchstabe, @strAdr_PLZ,
                           @strAdr_Ort, @strAdr_Land, @strAdr_Zusatz, -1, CONVERT(DATE, GETDATE()), @strBenutzername,
                         CONVERT(DATE, GETDATE()), @strBenutzername)
   
                     -- Die ID des neu erstellten Datensatzes holen
                SET @intAdr_ID_neu = SCOPE_IDENTITY();   

                -- Jetzt neu erstellten Datensatz als Recordset laden
                SELECT Adr_ID, Adr_Straße, Adr_Nr_von, Adr_Nr_bis, Adr_Buchstabe, Adr_PLZ, Adr_Ort, Adr_Land
                FROM [Adressen]
                     WHERE Adr_ID=@intAdr_ID_neu

                END
               
            ELSE

                  BEGIN
                       
                     SELECT Adr_ID, Adr_Straße, Adr_Nr_von, Adr_Nr_bis, Adr_Buchstabe, Adr_PLZ, Adr_Ort, Adr_Land
               
                     FROM  [Adressen]
           
                     WHERE Adr_ID=0

                     END

              END

   END

RETURN
Beim direkten Aufruf im SQL-Server klappt alles wie gewünscht. Beim Aufruf über VBA kommt dagegen die Fehlermeldung "Die Argumente sind vom falschen Typ, liegen außerhalb des Gültigkeitsbereiches oder sind miteinander unvereinbar." So ganz verstehen kann ich es nicht, da die übergebenen Argumente / Parameter eigentlich so passen müssten. Oder habe ich etwas übersehen?
Code:
Public Function Stored_Procedure_Suche_Adressen_ADO( _
                 intAdr_ID As Variant, strAdr_Straße As Variant _
               , intAdr_Nr_von As Variant, intAdr_Nr_bis As Variant _
               , strAdr_Buchstabe As Variant, strAdr_PLZ As Variant _
               , strAdr_Ort As Variant, strAdr_Land As Variant _
               , strAdr_Zusatz As Variant, bAdr_aktuell As Variant _
               , strStoredProcedure As Variant, bAdresse_anlegen As Boolean) _
                                                   As ADODB.Recordset
On Error GoTo sprFehler
    Dim rst As New ADODB.Recordset
    Dim cmd As New ADODB.Command
    Dim conn As New ADODB.Connection
    Dim strFehlermeldung As String
    Dim i As Integer
   
    'Die Variablen bereinigen
    If intAdr_ID = 0 Or intAdr_ID = "" Then intAdr_ID = Null
    If strAdr_Straße = "" Then strAdr_Straße = Null
    If intAdr_Nr_von = 0 Or intAdr_Nr_von = "" Then intAdr_Nr_von = Null
    If intAdr_Nr_bis = 0 Or intAdr_Nr_bis = "" Then intAdr_Nr_bis = Null
    If strAdr_Buchstabe = "" Then strAdr_Buchstabe = Null
    If strAdr_PLZ = "" Then strAdr_PLZ = Null
    If strAdr_Ort = "" Then strAdr_Ort = Null
    If strAdr_Land = "" Then strAdr_Land = Null
    If strAdr_Zusatz = "" Then strAdr_Zusatz = Null
    If bAdr_aktuell = "" Then bAdr_aktuell = Null
    'Wenn der Connection-String noch unbelegt ist, jetzt holen
    If strSQLOLEDB = vbNullString Then
        strSQLOLEDB = Funktion_Connection_String("SQLOLEDB")
    End If
    'Direkte Verbindung zum SQL-Server öffnen
    With conn
        .CursorLocation = adUseClient
        .ConnectionString = strSQLOLEDB
        .Open
    End With
    'Jetzt den Command-Befehl erstellen und definieren
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = strStoredProcedure
    cmd.ActiveConnection = conn
    cmd.CommandTimeout = 120
    'Name der Parameter, Typ, Richtung, Länge und Inhalt bestimmen
    cmd.Parameters.Append cmd.CreateParameter("intAdr_ID", adInteger _
                                            , adParamInput, , intAdr_ID)
    cmd.Parameters.Append cmd.CreateParameter("strAdr_Straße", adVarChar _
                                            , adParamInput, 50, strAdr_Straße)
    cmd.Parameters.Append cmd.CreateParameter("intAdr_Nr_von", adInteger _
                                            , adParamInput, , intAdr_Nr_von)
    cmd.Parameters.Append cmd.CreateParameter("intAdr_Nr_bis", adInteger _
                                            , adParamInput, , intAdr_Nr_bis)
    cmd.Parameters.Append cmd.CreateParameter("strAdr_Buchstabe", adVarChar _
                                            , adParamInput, 10 _
                                            , strAdr_Buchstabe)
    cmd.Parameters.Append cmd.CreateParameter("strAdr_PLZ", adVarChar _
                                            , adParamInput, 10, strAdr_PLZ)
    cmd.Parameters.Append cmd.CreateParameter("strAdr_Ort", adVarChar _
                                            , adParamInput, 50, strAdr_Ort)
    cmd.Parameters.Append cmd.CreateParameter("strAdr_Land", adVarChar _
                                            , adParamInput, 50, strAdr_Land)
    cmd.Parameters.Append cmd.CreateParameter("strAdr_Zusatz", adVarChar _
                                            , adParamInput, 50, strAdr_Zusatz)
    cmd.Parameters.Append cmd.CreateParameter("bAdr_aktuell", adBoolean _
                                            , adParamInput, , bAdr_aktuell)
    cmd.Parameters.Append cmd.CreateParameter("strBenutzername", adVarChar _
                                            , adParamInput, 50, Benutzername)
    cmd.Parameters.Append cmd.CreateParameter("bAdresse_anlegen", adBoolean _
                                            , adParamInput, , bAdresse_anlegen)
    cmd.Parameters.Append cmd.CreateParameter("bAlternativtreffer" _
                                            , adBoolean, adParamOutput)
    cmd.Parameters.Append cmd.CreateParameter("intAdr_ID_neu", adInteger _
                                            , adParamOutput)
    'Einen neuen Recordset mit den Ergebnissen des ausgeführten Befehls füllen
    rst.Open cmd.Execute
    bSucheAdr_Alternativtreffer = cmd.Parameters("bAlternativtreffer").Value
    Set Stored_Procedure_Suche_Adressen_ADO = rst
    Set cmd = Nothing
    conn.Close
    Set conn = Nothing
    Exit Function
sprFehler:
    On Error Resume Next
    strFehlermeldung = "Es sind Fehler aufgetreten: " & vbCrLf & vbCrLf
    With conn
        '.RollbackTrans
        For i = 0 To .Errors.Count - 1
            strFehlermeldung = strFehlermeldung _
                             & .Errors(i).Description & vbCrLf
        Next i
        .Errors.Clear
    End With
    Debug.Print strFehlermeldung, vbCritical, "Datenbankfehler"
    conn.Close
    Set rst = Nothing
    Set conn = Nothing
    Set Stored_Procedure_Suche_Adressen_ADO = Nothing
End Function
Unabhängig von der Fehlermeldung wäre auch die Frage, ob beim prüfen, ob ein Treffer vorliegt, nicht direkt der SELECT gestartet werden kann und man dann mit dem @@ROWCOUNT weiterarbeiten kann?

Dazu müsste man bei @@ROWCOUNT = 0 aber den vorher ausgewählten (leeren) Recordset wieder verwerfen und den neuen Recordset (z.B. der mit der Alternativsuche) laden. Dazu habe ich aber nirgendwo etwas gefunden...

Dann war ich überall auch auf der Suche nach guten Parametern für solch eine alternative Adresssuche. Also welche Fehler schleichen sich immer mal wieder ein und können durch gezielte Suchen nach anders zusammengestellten Suchbegriffen ausgeglichen werden (also z.B. Suche nach Straße, Nr., Ort ohne PLZ, weil diese z.B. falsch geschrieben ist)?

Vielleicht als Zusatz noch folgende Info: wenn ich nach
Code:
    rst.Open cmd.Execute
einen Haltepunkt setze, dann den Recordset mit rst.close schließe und noch einmal auf den vorherigen Punkt zurückgehe und diesen ausführe, dann wird der scheinbar zuvor erstellte Datensatz als Treffer gefunden und korrekt übergeben.

Man könnte jetzt natürlich tricksen und bei neuen Datensätzen schließen und nochmal öffnen - ist aber ja eigentlich Käse die Lösung.
Nachtrag: stefaktiv am 25. Sep 2013 um 06:35 hat folgendes geschrieben:
Ich habs jetzt hingekriegt und zwar statt dem direkten INSERT mit einer stored procedure. Die gibt als Rückgabewert die ID des neuen Datensatzes der Adresse zurück und verknüpft auch gleich zur Person. Der SELECT in der Hauptprozedur funktioniert dann auch und die neu angelegte Adresse wird als Trefferset übergeben.

Einziges Manko: leider ist die Adresse dann nicht editierbar. Eine eindeutige ID ist eigentlich mit dabei.

Ich hab jetzt schon eine Möglichkeit gesucht bei cmd.Execute einen editierbaren Recordset zu generieren. Ging leider nicht...?

Nachtrag: stefaktiv am 25. Sep 2013 um 06:36 hat folgendes geschrieben:
Gibt es zu so einer Adresssuche denn irgendwo Beispiele für gute Kombinationen von Alternativsuchen, falls kein Treffer gefunden wurde?
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Excel-Formeln