Toon posts:

[ASP.NET - VB] DataItem string maar 256 karakters?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik gebruik in een repeater een dataitem om een stuk tekst uit een MS Access database te halen. De tekst is als Memo veld opgeslagen.

Het ophalen lukt zonder problemen, alleen wordt slechts 256 karakters van de tekst weergegeven. Ik heb het op 2 manieren (zonder succes) geprobeerd:

1. In de Repeater zelf aanroepen met:
Visual Basic:
1
<%# Replace( Replace(Container.DataItem("tekst"),"`","'") ,vbCrLf,"<br>") %>


2. In een OnItemDataBound de tekst in een Label plaatsen
Visual Basic:
1
CType(e.Item.FindControl("TekstLabel"), Label).Text = DataBinder.Eval(e.Item.DataItem, "tekst").ToString

In de database is de tekst over de 256 tekens. Als ik dezelfde tekst via een objectReader opvraag en in een textbox plaats wordt wel de hele tekst weergegeven. De hierbij gebruikte code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    Sub FormulierVullen()
        dim objConn as new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" & DatabaseLocatie())
    
        dim objSelectCmd as new OleDbCommand ("SELECT * FROM Nieuwsberichten WHERE nieuwsberichtID=" & Request.QueryString("NieuwsberichtID"),  objConn)
    
        dim objSelectReader as OleDbDataReader
    
        try
            objConn.Open
            objSelectReader = objSelectCmd.ExecuteReader
    
            objSelectReader.Read
    
                NaamTextBox.Text = Replace(objSelectReader.GetString(2),"`","'")
                TekstTextBox.Text = Replace(objSelectReader.GetString(3),"`","'")
                afbeelding.imageUrl = "Images\" & Replace(objSelectReader.GetString(4),"`","'")
    
        catch ex as Exception
            dim status as String = "Opvragen van nieuwsbericht mislukt. Neem contact op met de beheerder van de website als deze fout zich blijft voordoen."
            Response.Redirect("Nieuwsberichten.aspx?status=" & status)
        finally
            objConn.Close
        end try
    End sub


Iemand een idee hoe ik dit op kan lossen om de hele tekst goed weer te geven?

Verwijderd

offtopic:
je try .. finally klopt niet
en je sluit de datareader nergens (ok, wordt waarschijnlijk gedaan door de objConn.Close, maar het is niet netjes).

[ Voor 17% gewijzigd door Verwijderd op 04-09-2005 00:46 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Ik weet dat er vaker problemen zijn met de manier waarop Access data selecteert. Ik heb wel eens hetzelfde gezeur gehad bij het ophalen van een lang tekstveld, waarbij het fout ging omdat ik distinct gebruikte in mijn query. Aangezien jij dat niet hebt, zal het dat wel niet zijn. Echter kwam ik toen in mijn zoektocht ook nog wat andere mogelijke oorzaken tegen: volgens mij moest een lang tekstveld achteraan staan in je select-list. Doe dus eens niet "SELECT *", maar "SELECT veld1, veld2, ..., veldx, tekstveld". Het is lang geleden, maar ik weet dat ik het ergens gelezen heb. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
-NMe- schreef op zondag 04 september 2005 @ 00:50:
Ik weet dat er vaker problemen zijn met de manier waarop Access data selecteert. Ik heb wel eens hetzelfde gezeur gehad bij het ophalen van een lang tekstveld, waarbij het fout ging omdat ik distinct gebruikte in mijn query. Aangezien jij dat niet hebt, zal het dat wel niet zijn. Echter kwam ik toen in mijn zoektocht ook nog wat andere mogelijke oorzaken tegen: volgens mij moest een lang tekstveld achteraan staan in je select-list. Doe dus eens niet "SELECT *", maar "SELECT veld1, veld2, ..., veldx, tekstveld". Het is lang geleden, maar ik weet dat ik het ergens gelezen heb. :P
Ik gebruikte in de Repeater een andere query overigens, als ik deze aanpas en tekst aan het eind toevoeg krijg ik hetzelfde probleem. Ik zie nu trouwens wel dat ook in MS Access maar 256 tekens weergegeven wordt dus probleem ligt dan niet bij ASP.NET?

Dit is de query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT 
Nieuwsberichten.nieuwsberichtID, 
Nieuwsberichten.naam, 
Nieuwsberichten.afbeelding, 
Nieuwsberichten.datum, 
Gebruikers.voornaam, 
Gebruikers.tussenvoegsel, 
Gebruikers.achternaam, 
Count(NieuwsberichtReacties.reactieID) AS aantalReacties, 
Nieuwsberichten.tekst
FROM (Nieuwsberichten INNER JOIN Gebruikers ON Nieuwsberichten.gebruikersID = Gebruikers.gebruikersID) 
LEFT JOIN NieuwsberichtReacties ON Nieuwsberichten.nieuwsberichtID = NieuwsberichtReacties.nieuwsberichtID
GROUP BY 
Nieuwsberichten.nieuwsberichtID, 
Nieuwsberichten.naam, 
Nieuwsberichten.afbeelding, 
Nieuwsberichten.datum, 
Gebruikers.voornaam, 
Gebruikers.tussenvoegsel, 
Gebruikers.achternaam, 
Nieuwsberichten.tekst;


Ik heb dit in de help kunnen vinden:
code:
1
You can sort or group on a Text field or a Memo field, but Access only uses the first 255 characters when you sort or group on a Memo field.


Moet dus blijkbaar group by omzeilen om hier goed gebruik van te kunnen maken..

[ Voor 9% gewijzigd door Verwijderd op 04-09-2005 10:59 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Waarom sloop je die count er niet uit en zet je daar een getal neer; bij iedere nieuwe reactie tel je dan eentje er bij op? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op zondag 04 september 2005 @ 11:05:
Waarom sloop je die count er niet uit en zet je daar een getal neer; bij iedere nieuwe reactie tel je dan eentje er bij op? :)
Bedoel je dat ik een aparte veld aantalReacties maak die elke keer wordt verhoogt? Kan in principe natuurlijk wel, maar leek me overbodig aangezien ik ook gewoon het aantal reacties uit de tabel NieuwsReacties kan optellen d.m.v. COUNT dus.

Ik heb het nu geprobeerd om de tekst op te halen (in dezelfde query als hierboven) met:
SQL:
1
First(Nieuwsberichten.tekst) AS tekst

Het werkt wel, ik krijg de hele tekst.
Ik vraag me alleen af of dit wel kan en later geen problemen gaat opleveren.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Wat betreft die count: er zijn situaties denkbaar waar het beter is om wat te denormaliseren en daarmee de performance wat op te krikken. Op een drukbezocht forum bijvoorbeeld, wil je dus echt niet dat er elke keer een count wordt gedaan op de messages-tabel om zo iemand's postcount op te halen. :P

Of het bij jou handig is om die count eruit te laten moet je zelf maar even inschatten. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Verwijderd schreef op zondag 04 september 2005 @ 11:20:
[...]

Bedoel je dat ik een aparte veld aantalReacties maak die elke keer wordt verhoogt? Kan in principe natuurlijk wel, maar leek me overbodig aangezien ik ook gewoon het aantal reacties uit de tabel NieuwsReacties kan optellen d.m.v. COUNT dus.

Ik heb het nu geprobeerd om de tekst op te halen (in dezelfde query als hierboven) met:
SQL:
1
First(Nieuwsberichten.tekst) AS tekst

Het werkt wel, ik krijg de hele tekst.
Ik vraag me alleen af of dit wel kan en later geen problemen gaat opleveren.
Bij alleen-lezen levert dit geen problemen op.

Verder kan ik alleen maar instemmen met -Nme- over de Count. dit wordt (zeker in Access) nogal traag bij grotere aantallen records.
Pagina: 1