Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst PATINDEX (oder auch LIKE) mit Platzhaltern in gespeicherter Prozedur verwenden

Mitglied: PCFJKG

PCFJKG (Level 1) - Jetzt verbinden

16.08.2008, aktualisiert 08.06.2012, 4594 Aufrufe, 2 Kommentare

Es geht wieder einmal mehr um die Syntax bei MS-Access und SQL ...

Ein MS-Access Projekt, verbunden mit einem MS SQL-2000 SERVER, verwendet eine gespeicherte Prozedur, welche beim Aufruf z.B. einen Wert für eine Variable übergeben bekommt. Dieser wird in dieser Prozedur bei einer Select-Anweisung auf Vorhandensein in einer Tabellenspalte geprüft und die entsprechenden Zeilen der Tabelle ausgegeben. In einem zweiten Fall soll diese Prüfung entfallen und alle Zeilen der Tabelle sollen ausgegeben werden (neben anderen Kriterien).

Um die SELECT-Anweisung mit verschiedenen Variablen ausführen zu können, wird diese in eine Zeichenkette geschrieben und dann mit EXEC(Zeichenkette) ausgeführt. Soweit so gut. Z.B.
01.
Alter Procedure P_Test 
02.
(	 
03.
	@Param varchar(9) 
04.
05.
As 
06.
 
07.
DECLARE @CmdStr varchar(3000) 
08.
 
09.
SET @CmdStr = 'SELECT DISTINCT TOP 100 PERCENT <TABLE>  ... 
10.
INTO 
11.
FROM 
12.
INNER JOIN 
13.
WHERE 
14.
GROUP BY 
15.
HAVING (TABLE.Spalte LIKE ' + @Param + ') 
16.
ORDER BY' 
17.
 
18.
EXEC (@Cmdstr)
An Stelle von LIKE habe ich auch ---> PATINDEX('% .. ' + @Param + ' ... %', Spalte) > 0 <--- in HAVING mit mehreren Syntaxvarianten versucht.

Aber:
@Param mit '?' oder '*' bringt Fehler, PATINDEX ebenso bei Übergabe von '%' oder '%%' , Alle möglichen Kombinationen von
PATINDEX ''%' + ' + @Param + ' + '%'' erkennen % als Modulo Datentyp oder bringen in anderen Varianten Syntaxfehler.
Wenn ich dann endlich eine Variante habe, bei welcher "händig" die Ausführung der Prozedur funktioniert, kann ich dies aus VBA nicht ausführen, weil die Stringübergabe Fehler bringt.
01.
Call Application.CurrentProject.Connection.Execute("Exec P_Test '' ") 
02.
Call Application.CurrentProject.Connection.Execute("Exec P_Test ' ' ") 
03.
Call Application.CurrentProject.Connection.Execute("Exec P_Test '%' ") 
04.
Call Application.CurrentProject.Connection.Execute("Exec P_Test '?' ") 
05.
Call Application.CurrentProject.Connection.Execute("Exec P_Test '*' ")... usw. bis irgendwann die Geduld zu Ende ist.
What can I do ?

(Um Mißverständnissen vorzubeugen: Um alle Zeilen der Tabelle auszuwählen, kann natürlich auch @Param mit einem Standardwert belegt werden, welcher dann bei LIKE mit einer OR - Ergänzung abgefragt wird, wenn keine Wertauswahl erfolgen soll. Es geht mir vielmehr prinzipiell darum, wie z.B. das
Beispiel der MS-Server 2000 Hilfe: ....... LIKE @au_lname + '%' ....... so in den @CmdStr eingefügt werden kann, dass % nicht als Modulo interpretiert wird oder Syntaxfehler beim Aufruf der Prozedur aus VBA gemeldet werden, wenn EXEC(@CmdStr) ausgeführt wird.)

PCFJKG
Mitglied: Biber
29.08.2008 um 09:14 Uhr
Moin PCFJKG,

das Problem ist eigentlich nur das Verpacken des einfachen Anführungszeichens, das ja Bestandteil des von LIKE verwendeten Parameters sein muss.

Ich würde dieses Detail aber schon aus Wartbarkeitsgründen bei der Erzeugung Deines CMDStr's angehen:
SET @CmdStr = 'SELECT DISTINCT TOP 100 PERCENT <TABLE> ... 
INTO 
FROM 
INNER JOIN 
WHERE 
GROUP BY 
HAVING (TABLE.Spalte LIKE '+char(39) + @Param + char(39)+ ') 
ORDER BY'...
Im erzeugten Call-Aufruf wäre die Mimik entsprechend
Call Application.CurrentProject.Connection.Execute("Exec P_Test chr(39)+'bla%' +chr(39) ")
Grüße
Biber
Bitte warten ..
Mitglied: PCFJKG
29.08.2008 um 21:05 Uhr
Hallo Biber,

ich habe mich eben erst einloggen können und konnte die Lösung noch nicht probieren. Da sie aber sehr einleuchtend aussieht denke ich, dass es wohl funktionieren wird. Soweit ich trotzdem noch Probleme habe, würde ich mich gern noch einmal melden; aber: auf jeden Fall erst einmal vielen Dank und ein schönes Wochenende vom nun wieder optimistischen und dankbaren

PCFJKG
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Platzhalter für VBA Code
gelöst Frage von Dr.CornwallisDatenbanken4 Kommentare

Hi zusammen, viele von euch VBA Cracks werden jetzt bestimmt lachen aber ich schaffe es einfach nicht einen Platzhalter ...

Windows Server

Wie kann man die Benutzerinitialen aus einer Active Directoy als Platzhalter in einem zu verteilenden Registry-Key via GPO verwenden?

gelöst Frage von ITCrowdSupporterWindows Server3 Kommentare

Die Initialen der Benutzer, welche in der Active Directory gespeichert sind sollen automatisch für die MS Office Anwendungen eingetragen ...

Datenbanken

SQL Statement auseinandernehmen Like

gelöst Frage von H41mSh1C0RDatenbanken20 Kommentare

Hi@All, Ziel: Beim erstellen eines Reports existiert ein Feld in der eine bestimmte OU ausgewählt werden kann. Wird keine ...

Monitoring

Shutdown Prozedur nach einem Stromausfall - USV

Frage von chrisschmitt93Monitoring1 Kommentar

Hallo Leute , wir müssen derzeit für die Schule ein Projekt in einer für jedermann bekannten Firma ( die ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 2 TagenHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 3 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Server
Standortvernetzung zu einem Strato VServer (Windows)
Frage von matzefratze81Windows Server10 Kommentare

Moin, ich komme aus einem Enterprise-Umfeld und habe den Fehler gemacht, dass ich mich auf ein kleines Unternehmen eingelassen ...

Grafikkarten & Monitore
4k EIZO Monitor, Fernseher und Splitter
Frage von LerxxeyGrafikkarten & Monitore9 Kommentare

Hallo Zusammen, vielleicht könnt ihr mir bei einem Problem helfen wo ich einfach nicht mehr weiterkomme Und zwar haben ...

Microsoft Office
Freitagsfrage? Excel und CSV - Import statt öffnen
gelöst Frage von KraemerMicrosoft Office7 Kommentare

Moin zusammen, entweder fallen mir heute nicht die richtigen Wörter für Google ein, oder es geht schlicht nicht. Gibt ...

Entwicklung
Batch - Überprüfung
gelöst Frage von apex.predator24Entwicklung6 Kommentare

Hallo Zusammen Gibt es eine Möglichkeit, einen Prozess im TaskManager über eine Batch-Datei zu überprüfen ob dieser läuft oder ...