[C++] SQL records filteren

Pagina: 1
Acties:

  • SmidsY
  • Registratie: Juni 2001
  • Laatst online: 21:14

SmidsY

hallo!?.............

Topicstarter
Dit is mijn eerste post hier dus ik hoop dat ik voldoe aan de gestelde eisen.
Ik heb het volgende probleem. Ik ben met een programma bezig dat een SQL database uitleest. Het filteren van records lukt wel mits ik in de broncode opgeef waarop gefilterd moet worden. Echter wat ik wil is dat ik d.m.v. een editbox deze filterwaarde kan opgeven.

De waarde dit ik in de editbox invul wordt in een string opgeslagen en wil ik waar ik hem nodig heb weer oproepen. De string werkt echter het terugplaatsen wil niet lukken.

zie onderstaande broncode.

C++:
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
void CSQLVoorraadView::OnBnClickedZoek()
{
    GetDlgItemText(IDC_EDIT1,Zoek);
    //AfxMessageBox(Zoek);

    m_pSet->Close();
    m_pSet->m_strFilter = "[fldArtikelcode] =  Zoek ";
    //m_pSet->m_strFilter = "fldArtikelcode = '1119' ";
    m_pSet->Open();
    int iNumRecords= m_pSet->GetRecordCount();
    if (iNumRecords == 0){ 
        AfxMessageBox("No matching records found");
        m_pSet->Close();
        m_pSet->m_strFilter = "";
        m_pSet->Open();
    }
    UpdateData(FALSE);
}


v.b. als ik deze regel gebruik

m_pSet->m_strFilter = "fldArtikelcode = '1119' "; dan filtert hij netjes op 1119

nu dacht ik zelf aan deze

m_pSet->m_strFilter = "[fldArtikelcode] = Zoek "; hier wordt de string weer aangeroepen en zou het theoretisch moeten werken. Echter dit doet het niet. Laat ikhet zo staan krijg ik op het moment dat ik op de zoeknop druk de volgende error.

invalid column name 'Zoek' statement(s) could not be prepared

Heb de msdn gebruikt en deze helpt mijop dit punt niet echt verder. Ben ik op het juiste pad. Is er een andere methode die wel werkt die ik over het hoofd zie!?

Het probleem is gelokaliseerd, het bevindt zich tussen het keyboard en de rugleuning.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:35

Creepy

Tactical Espionage Splatterer

SmidsY schreef op 15 april 2004 @ 11:44:


m_pSet->m_strFilter = "fldArtikelcode = '1119' "; dan filtert hij netjes op 1119

nu dacht ik zelf aan deze

m_pSet->m_strFilter = "[fldArtikelcode] = Zoek "; hier wordt de string weer aangeroepen en zou het theoretisch moeten werken.
Nee, want je zet nu letterlijk "[fldArtikelcode] = Zoek " als filter. Alles wat je tussen "'s zet is een string. Niks meer, niks minder. Dat PHP nu variabelen vervangt tussen "'s wil niet zeggen dat C++ dat ook doet ;)
Je zult de string "[fldArtikelcode] = " en de inhoudt van Zoek aan elkaar moeten plakken (concatenation).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Je moet nog enkele quotes om 'zoek' heenzetten.

[ Voor 14% gewijzigd door cameodski op 15-04-2004 12:42 ]

Never underestimate the power of


  • SmidsY
  • Registratie: Juni 2001
  • Laatst online: 21:14

SmidsY

hallo!?.............

Topicstarter
Dat had ik geprobeerd, my bad dat ik dat niet had vermeld |:(

m_pSet->m_strFilter = "[fldArtikelcode] = "Zoek" ";

echter dan krijg ik de volgende compile error,

C2143: syntax error : missing ';' before 'string'
C2146: syntax error : missing ';' before identifier 'Zoek'

Dit zou dus op te lossen zijn door een extra ; te plaatsen, echter ik weet niet waar want

m_pSet->m_strFilter = "[fldArtikelcode] = "Zoek"; "; vind hij niet leuk (zelfde error)
m_pSet->m_strFilter = "[fldArtikelcode] =; "Zoek" "; vind hij ook niet leuk (zelfde error)

ik weet het dus nu even niet meer :'(

Het probleem is gelokaliseerd, het bevindt zich tussen het keyboard en de rugleuning.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Twee opmerkingen:
1. Volgens mij zet je dubbele quotes om zoek heen, terwijl het enkele quotes moeten zijn.
2. Als je dubbele quotes in een string wilt hebben, moet je ze escapen (in C++ door er een \ voor te zetten, dus \").

PS: Excuses voor de dubbele quotes in mijn vorige post. Ik denk dat die voor de verwarring zorgden.

[ Voor 19% gewijzigd door cameodski op 15-04-2004 12:43 ]

Never underestimate the power of


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Maar daarmee zet je nog steeds letterlijk 'Zoek' in m_strFilter. Wat voor type is m_strFilter? Als dat std::string is kun je gewoon '+' gebruiken om de boel aan elkaar te plakken. Anders zul je met strncat moeten werken.

"He took a duck in the face at two hundred and fifty knots."


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
_Squatt_ schreef op 15 april 2004 @ 12:57:
Maar daarmee zet je nog steeds letterlijk 'Zoek' in m_strFilter. Wat voor type is m_strFilter? Als dat std::string is kun je gewoon '+' gebruiken om de boel aan elkaar te plakken. Anders zul je met strncat moeten werken.
Klopt moet ook nog anders, ik heb alleen nog maar naar de sql foutmelding gekeken.

Never underestimate the power of


  • SmidsY
  • Registratie: Juni 2001
  • Laatst online: 21:14

SmidsY

hallo!?.............

Topicstarter
_Squatt_ schreef op 15 april 2004 @ 12:57:
Maar daarmee zet je nog steeds letterlijk 'Zoek' in m_strFilter. Wat voor type is m_strFilter? Als dat std::string is kun je gewoon '+' gebruiken om de boel aan elkaar te plakken. Anders zul je met strncat moeten werken.
Klopt de filteropdracht tussen enkele ' ' plaatsen werkt niet, nou ja dan zoek hij naar de tekst Zoek en niet de inhoud van de string Zoek. Dus niet de oplossing. m_strFilter hoort bij CString CRecordset::m_strFilter.

Het probleem is gelokaliseerd, het bevindt zich tussen het keyboard en de rugleuning.


  • SmidsY
  • Registratie: Juni 2001
  • Laatst online: 21:14

SmidsY

hallo!?.............

Topicstarter
doh, ben eruit de "oplossing" is als volgt:

m_pSet->m_strFilter = "[fldArtikelcode] = " +Zoek;

Nu kan ik in de editbox invullen wat ik wil en daar wordt op gefilterd. Een ieder bedankt voor zijn input :>

Het probleem is gelokaliseerd, het bevindt zich tussen het keyboard en de rugleuning.

Pagina: 1