[VBA + SQL] Mid-functie in query

Pagina: 1
Acties:

  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Een goeiedag,

op deze regenachtige dag ben ik weer eens aan het klooien met VBA en Access en SQL. Nu loop ik tegen het volgende probleem aan:

Ik heb een query, daarin worden tekstbewerkingen uitgevoerd. In een ander topic van mij was namelijk gezegd dat dat kon. Nu vraagt hij echter tog nog 2x om een waarde.
code:
1
2
3
4
Me.Componentlijst.RowSource = 
"SELECT Component_product.t_eitm, Component_product.t_comp 
FROM Component_product 
WHERE Mid(Component_product.t_eitm, 10, 7) = Mid(Productcode, 10, 7)"

De query staat gewoon als 1 lang brok erachter, maar dat verneukt de lay-out hier zo erg. Iemand de oplossing? Als het niet kan met tekstbewerkingen, heeft iemand anders dan een andere oplossing? Want ik moet het rechterstuk van de waarde niet hebben en aan de linkerkant staan eerst 9 spaties..... Levert dus zo'n vreemde constructie op voor de query. |:(

PS. Ik heb die data niet zo gemaakt. Komt uit andere database en ik wil info hebben wat in die database staat.

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


  • Boss
  • Registratie: September 1999
  • Laatst online: 18:12

Boss

+1 Overgewaardeerd

Misschien iets om te proberen: 2 tijdelijke velden maken met als waarden die mid 7 karakters en dan die met elkaar laten vergelijken, ipv de mid functie in de vergelijking gebruiken.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Keej, voor de eerste reactie:
Er staat helaas ook nog een hele zooi achter, dat wil ik ook niet inlezen.

Voor de 2e reactie:
Is het slim om zoiets uit te halen bij 6000 records? Volgens mij gaat dat met pure SQL veel sneller, of zeg ik nu iets vreemds??

Database staat op een SQL-server

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


Verwijderd

Mid bestaat niet in T-SQL (volgens mij), maar je kunt het wel faken door een combinatie van LEFT, RIGHT en LEN te gebruiken. Dus zo iets...
code:
1
(...) WHERE (LEFT(RIGHT(veldnaam, LEN(veldnaam) - 3), 2) = 'wat jij wil')

  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Jeej, het werkt!!!!
Althans, voor een groot gedeelte, nu nog beetje debuggen en dan moet ie het doen. Spenks mates

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Keej, het werkt dus niet, als ik buiten de query uitvoer, dan gaat het wel goed, alleen binnen de query gebeurt er weinig.... Volgens mij is het dus niet mogelijk om tekstbewerkingsfuncties uit te voeren onder SQL.
code:
1
2
3
4
5
6
7
8
9
10
11
Dim Productcode As String
Dim dingtest As String
Productcode = Me.Product_zoek.value
dingtest = Left(Right(Productcode, Len(Productcode) - 9), 6)
MsgBox "" & dingtest
Me.Componentlijst.RowSource = 
"SELECT Component_product.t_eitm, Component_product.t_comp
FROM Component_product 
WHERE LEFT(RIGHT(Component_product.t_eitm, LEN(Component_product.t_eitm) - 9), 6) 
= Left(Right(Productcode, Len(Productcode) - 9), 6)"
Me.Componentlijst.Requery

Mocht iemand hier nog wat inzien wat wel werkt, dan graag.... Ik zie het niet meer... :?

Die MsgBox gooit er overigens gewoon netjes het tekstgedeelte uit wat ik moet hebben, dus dat gaat goed.

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


Verwijderd

Bij SQL-problemen is het altijd handig om je probleem bij de basis zo eenvoudig mogelijk aan te pakken.

Stap 1. Ga met je enterprisemanager naar de SQL-server, klik met je rechtmuisknop op de tabel en doe show all records.
Stap 2. Klik op het knopje met de letters SQL en eventueel op het knopje met de mogelijkheid om velden aan te klikken, tabellen toe te voegen en dergelijke.
Stap 3. Doe eerst eens een SELECT zonder WHERE clause. Overtuig jezelf van het feit dat er wel records in de tabel zitten die voldoen aan je criterium
Stap 4. Voeg je criterium eenvoudig toe, dus zonder tekstbewerking, dus iets in de trant van WHERE Product = 'blablablabla'. Wanneer dat werkt kun je verder gaan met het moeilijk maken van je argument.
Stap 5. Op het moment dat in de enterprisemanager je SQL werkt, kopieer dan naar je programma.

PS probeer ook eens
WHERE LEFT(RIGHT(Component_product.t_eitm, LEN(Component_product.t_eitm) - 9), 6)
= '" & testding & "'"

  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Ik werk dus precies volgens jouw stappenplan :)
Queries moet je idd niet in 1x supermoeilijk maken. Met behulp van die msgbox weet ik dus zeker dat het zo werkt. Heb het namelijk ook voor die andere gedaan en weet gewoon 100% zeker dat die waardes goed zijn, dat is juist het vreemde :?

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


Verwijderd

Als je zeker weet dat alles goed is, dan is je probleem opgelost neem ik aan?

  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Topicstarter
Dat geeft IMHO dus dat alles goed is, maar niet werkt :)
Enniehoe, ik ga maar iets anders bedenken voor dit probleem, want dit werkt niet helemaal volgens mij :)

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze

Pagina: 1