Aktív témák
-
Damocles
csendes tag
Abszolút kezdő vagyok, szóval ha valaki tudna megoldást a problémámra úgy mondja, mintha egy hülyének beszélne. Szóval a gond a következő:
Adatbáziskezelés a feladat, van is egy szép kis access táblázatom, amit egy adodc egy datagrid es egy datacombo segítségével szeretnék kezelni a formomon.
Van egy Tipus nevű oszlopa a táblázatnak és azt szeretném, hogy a datacomboban választási lehetőségeknek megjelenjenek a rekordok típusai és ha valamelyiket kiválasztom, akkor CSAK az olyan típusuak jelenjenek meg a datagridben. Ennek érdekében a következő kódot írtam be:
Private Sub Dcbtipus_Change()
Dim strSQL As String
If Dcbtipus.BoundText = '''' Then Exit Sub
strSQL = ''select * from Adatbazis where Tipus = '' & Dcbtipus.BoundText
adoadat.RecordSource = strSQL
adoadat.Refresh
grdadat.ClearFields
grdadat.ReBind
End Sub
Dcbtipus - a datacombo
adoadat - a adodc
grdadat - a datagrid
A probléma az, hogy nekem a adoadat RecordSource tulajdonságához select * from Adatbazis where Tipus = ''valami'' -t kéne beírnom, hogy működjön (tehát idézőjelek közt kéne lennie ennek: & Dcbtipus.BoundText. )
Deha ezt idézőjelek közé teszem, akkor azt ''szószerint'' értelmezi, tehát nem select * from Adatbazis where Tipus = ''valami'' lesz, hanem ez: select * from Adatbazis where Tipus = & Dcbtipus.BoundText
Nincs valami megoldás arra, hogy idézőjelben legyen és normálisan is értelmezze?
[Szerkesztve] -
blemidon
tag
-
Damocles
csendes tag
Igen, pont ahogy gondoltam. Ráadásul szerintem elírtad és nem
strSQL = ''select * from Adatbazis where Tipus = ''' & Dcbtipus.BoundText & '''''
hanem
strSQL = ''select * from Adatbazis where Tipus = ''' & Dcbtipus.BoundText & ''''
(a végén csak egy ' meg egy '' nem 4)
De teljesen mindegy, sehogy nem jó. Az ' utáni rész bezöldül , akár van a végén másik, akár nem, és megjegyzésnek veszi, tehát a tényleges programba nem kerül bele. Más ötlet?
Ja egyébként már kipróbáltam manuálisan megadni a RecordSource tulajdonságát (csakhát ugye így soha nem fog dinamikusan változni a dolog :-P ) és az úgy okés hogy select * from Adatbazis where Tipus = ''valami'' - tehát idézőjelek közé kell rakni. (De mint már írtam az elején idézőjelek közt azért nem jó, mert akkor konkrét szövegnek veszi a Dcbtipus.BoundText -et)
[Szerkesztve] -
blemidon
tag
Várj 1 picit!
Nem írtam el, a PH kovertálja az idézőjelet 2 aposztróffá:)
Tehát:
strSQL = [idézőjel]select * from Adatbazis where Tipus = [aposztróf][idézőjel] & Dcbtipus.BoundText & [idézőjel][aposztróf][idézőjel]
ha a Dcbtipus.boundtext értéke pl ''szöveg'' akkor ennek a kimenete:
select * from Adatbazis where Tipus = 'szöveg'
Amit ide írsz a parancsba, az nem basic, hanem SQL kifejezés, ott pedig a szöveg aposztrófok között van, nem idézőjelben.
Próbáld meg így, mennie kell, kipróbáltam. -
Damocles
csendes tag
Akárhogyan nézem de mindkét könyvem SQL-nél is idézőjelet ír. Ráadásul kipróbáltam és úgy működik is!
Az aposztrófot meg NEM tudom beírni a kódba ugyanúgy, mint ahogy idézőjelet SEM tudok úgy, hogy ne értelmezze azt fejlesztői jegyzetnek illetve a string elejének/végének.
Egyszerűsítve a probléma (illetve ez egy másik, de az alapja ugyanaz):
Ez akarom megjeleníteni egy msgboxban:
Ciceró írta: ''Damoklész kardja lebeg a feje felett'' (bár nem tudom ez így igaz-e)
Ez akkor ez lenne : MsgBox (''Ciceró írta: ''Damoklész kardja lebeg a feje felett'' (bár nem tudom ez így igaz-e)'') csak a gond az, hogy ezt nem lehet se az idézőjel se a zárójel miatt.
Hogyan lehet zárójelet, idézőjelet vagy esetleg aposztrófot megjeleníteni mondjuk egy msgboxban??? -
L3zl13
nagyúr
VB-t nem ismerem, de sok nyelvben van valami extra kerakter, amivel jelölni lehet, hoyg az utánna következő karaktert csak sima karakterként értelmezze, ne speciális jelként.
PHP-ben pl ilyen a .
Tehát ha én stringben idézőjelet akarok írni akkor ''Szöveg ''valami'' szöveg'' És az azt jelenti pl kiiratáskor, hogy: Szöveg ''valami'' szöveg.Aki hülye, haljon meg!
-
blemidon
tag
Akkor vmit nagyon rosszul csinálsz. Itt a teljes progim amit irtam kipróbálni, csak az idézőjeleket és aposztrófokat cseréltem ki [id/ap]-re:
Private Sub Form_Load()
Dim x As String
x = [idézőjel]derry[idézőjel]
Adodc1.RecordSource = [idézőjel]select * from customer where lname = [aposztróf][idézőjel] & x & [idézőjel][aposztróf][idézőjel]
Adodc1.Refresh
End Sub
Ez sikeresen kiszűri az 1 db ''derry'' rekordot a tálából.
Ciceró barátunk így pl működik:
MsgBox ([idézőjel]Ciceró írta: [aposztróf]Damoklész kardja lebeg a feje felett[aposztróf] (bár nem tudom ez így igaz-e)[idézőjel])
Ezt csináltam a fenti példában is. SQL megy idézőjellel is, csak az aposztróffal egyszerűbb.
Amugy a fenti adodc a FoodMart.mdb példa customers táblájára van kötve, valszinü neked is megvan hogy kipróbáld, ha nincs, akkor küldöm az egész projectet ha akarod.
Amúgy az a titok, hogy az aposztróf két idézőjel között legyen egy sztringben, és akkor nem commentnek látja, hanem 1 szöveg részének, és nem foglalkozik vele.
[Szerkesztve] -
Damocles
csendes tag
Ez biztos hogy 6-os vb, ami neked van?
Nekem a ''select * from customer where lname = ''' & x & ''''' sor beírása után hibaüzenetet ad:
Compile error:
Expected: line number or label or statement or end of statement
Ciceró barátunk pedig ugyan működik, de aposztróffal írja ki, nem idézőjelel.(ugyan legutobb azt írtam, hogy aposztrófot se birok berakni, de mostmár belátom, tévedtem, viszont alapvetően nekem idézőjel kéne) -
Damocles
csendes tag
Ez a sor viszont ''működik'' és aposztrófok közé teszi a derryt, de ettől még nekem ugyanúgy hibás a programom mintha semmi nem lenne ott. Nekem idézőjelek között kéne lennie, nem aposztrófok között! Ha jól látom, az az egyetlen eltérés kettőnk között, hogy neked egy rekordot kell kiszűrnöd, nekem meg minden olyan rekordot, aminek az egyik mezőjében az a bizonyos izé van (ami a datacombo tartalma)
[idézőjel]select * from customer where lname = [idézőjel] & [idézőjel][aposztróf][idézőjel] & x & [idézőjel][aposztróf][idézőjel] -
Damocles
csendes tag
Köszi!!!
Sikerült!!!
Éljen!!!
Egyébként pont most jöttem rá véletlenül egy másik megoldásra. Ha csinálok egy olyan mezőt, amibe csak számok kerülnek (a különböző típusoknak kódokat adok) és ezek a számok alapján kérdezek rá, akkor nem kell idézőjel.
De mostmár mind1!
A Chr$(34) remek ötlet volt, magamtól soha az életbe nem jöttem volna rá. Nagyon köszi! -
Damocles
csendes tag
Akkor továbra sem értem, hogy neked miért aposztróf kell nekem meg idézőjel, hogy működjön. De a probléma megoldódott (lásd fent) és nagyon köszi neked is a segítséget.
A furcsa az, hogy mástól is megkérdeztem (olyan programozót, aki a vb-t a mindennapi munkájához használja) és ő is aposztrófot emlegetett, szóval valami velem nem stimmel (a basicem is tőle van lemásolva szóval még csak verziókülönbség sem lehet). -
blemidon
tag
Igen. Sztem valami olyan lehet, hogy a SELECT... utasítás az SQL, nem basic. Ezt az adatbázis szerver hajtja végre, nem a basic interpreter. Tehát attól is függhet hogy milyen adatbázisszervert használsz.
De a lényeg hogy megy:)
(Olyan konstansoknak nézzél utána hogy vbNewLine (ez biztos), stb, van egy csomó ilyen speckó karakter definiálva, és akkor nem kell chr(34), mégis szebb:)
Aktív témák
- E-roller topik
- OLED TV topic
- Júniusban végre bemutatkozhat az új Gears of War játék
- Bundle topik
- A fociról könnyedén, egy baráti társaságban
- Formula-1
- Mibe tegyem a megtakarításaimat?
- Alkoholista nevelde
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Intel Dual Core 2000 felhasználók barátságos offolós topikja
- További aktív témák...
- MacBook Pro M1MAX 64gb ram 1TB SSD Áfás
- Konzolok karbantartása - hűtőpaszta csere - takarítás (minden 10. karbantartás INGYENES)
- Samsung Galaxy S22 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- AKCIÓ! GAMER PC - RTX 3060Ti - i5 10400F/11400F - 16GB DDR4 - 500GB Nvme SSD - 500W 80+
- GAMER PC - GTX 1060 6GB - i5 10400F/11400F - 16GB RAM - 120- 480GB SSD - 500GB HDD