Eigen text verdwijnt uit de unbound textbox na afsluiten form

Status
Niet open voor verdere reacties.

Rap261

Gebruiker
Lid geworden
2 sep 2008
Berichten
273
Goede middag,


Ik zoek de eigenschap om de zelf ingegeven text in een textbox te behouden. Op dit moment gaat de text nl verloren na de Form te hebben gesloten.
Het is de bedoeling dat de textbox fungeert als een soort memobord waarbij text bewaard blijft en (wenselijk) ook opnieuw aangepast kan worden.

Ik loop vast na diverse probeersels.
Wie kan me helpen of heeft/weet een goede link voor dit probleem?
Alvast bedankt!
 
Waarom zou de textbox een waarde behouden? Je zult die moeten opslaan in (en ophalen uit!) een globale variabele of in een tabel. De 'default' waarde die je er vanuit design mode in kunt zetten kun je niet benaderen vanuit runtime mode.
 
Hi Rene,


Thanks. Reden voor een textbox is zodat de gebruiker ook evt de text kan aanpassen/updaten. Daarnaast kan ik in een textbox scrollen wat bij een Label weer niet kan. Althans, tot nu toe lukt me dat niet. Weet dat de text multi line moet zijn..

Ik gebruik dus liever een textbox en heb in een soort gelijk topic gelezen over "Expressions" die moeten worden aangepast maar verder werd er niet beschreven hoe..
Indien een textbox niet gaat lukken, weet je welk ander soort control ik dan het beste kan gebruiken?
 
Je hebt geen echt antwoord gegeven op de vraag... Een tekstvak is doorgaans gekoppeld aan een tabelveld. Zeker als je het wilt opslaan. Een niet-gebonden tekstveld gebruik je bijvoorbeeld voor formules, of voor gegevens die je ophaalt middels een keuzelijst en die je wilt laten zien, maar waar je verder niets mee doet. Als je dus een niet-gebonden tekstvak op je formulier zet, dan weet je één ding 100% zeker: de waarde ervan wordt nooit opgeslagen. Wat je ook doet. Je kunt de inhoud van zo'n tekstveld nog wel tijdelijk in een variabele zetten, maar zodra je de db sluit, is de waarde weg.
Voor een gebruiker lijkt het mij behoorlijk frustrerend om in een tekstvak van alles in te typen, en dan later tot de conclusie te moeten komen dat de noeste arbeid het digitale ravijn in is gekukeld. Want waarom zou je überhaupt dan tekst willen invoeren? Daar wil je toch iets mee doen? Het meest logische is: opslaan in een tabel. En dus niet in een niet-gebonden tekstvak.
Leg dus eerst eens fatsoenlijk uit wat je eigenlijk wilt. Want tot nu toe is je verhaal behoorlijk onzinnig....
 
Michel,



Dat een Textbox standaard geen ingegeven waarde behoud na afsluiten wist ik niet vandaar wellicht mijn "onzinnigheid"
Daar de text wel degelijk bewaard moet worden, en ook tussendoor geupdate moet worden, is het wegschrijvan naar een Variable volgens mij geen optie. Daarom heb ik gezocht naar het wegschrijven naar een tabel d.m.v. Insert InTo.
Ik loop echter nu vast op de melding (Rood in code): "Query input must contain at least one Table". Gezien de code heb ik wel mij tabel genoemd maar duidelijk dat ik nog iets mis.

Mijn gegevens:
Combo 6 = keuze menu met 3 opties
TextDetails = Textbox met text die uit een tabel wordt gehaald en door de gebruiker moet kunnen worden geupdate via de textbox zelf
Projects = naam Tabel
ProjectsID = sleutel in Tabel
Details = veld in Tabel (text voor de Textbox)


Code:
Private Sub Command12_Click()
  
     Dim sql As String
     Dim id As Integer
     Dim LName As String
  
     id = Me.Combo6.Value
  
     LName = Me.TextDetails.Value
  
     If Not IsNull(LName) Then
          sql = "INSERT INTO Projects ([Details]) VALUES ('" & LName & "') WHERE Projects.ID = " & id & ";"
          [COLOR="#FF0000"]CurrentDb.Execute (sql) [/COLOR]  
     Else
          'MsgBox ""
          Exit Sub
     End If
  
End Sub

CurrentDB veranderen in de naam van mijn DB of in de naam van de Form/Tabel heeft niet geholpen.
Weet jij/iemand wat ik hier moet veranderen?

Thanks
 
Een insert into creëert een nieuwe tabel. En zou nu dus steeds nieuwe data opslaan, zonder de oude te overschrijven.
 
Zullen we eens bij het begin beginnen? Ik heb nu de indruk dat je met je vraag halverwege in het probleem bent gesprongen, met als resultaat dat ik ondertussen geen flauw benul meer heb wat je nu wilt.
Punt 1: een formulier koppel je doorgaans aan een tabel of query. In dat geval zijn de velden ook gekoppeld aan een tabel. En worden de ingevulde waarden dus prima opgeslagen. Hoef je niks voor te bouwen.
Punt 2: als dat niet zo is: waarom niet?
Punt 3: waarom dus een aparte toevoegquery?

Punt 4: je code kun je beter zo doen:
Code:
     If Not LName = vbNullString Then
          sql = "INSERT INTO Projects ([Details]) VALUES ('" & LName & "') WHERE Projects.ID = " & ID
          CurrentDb.Execute sql
     Else
Zie je gelijk waarom jouw code fout was ;)
 
Een mogelijke oplossing
Code:
 'je oude declaraties blijven gewoon
dim rst as RecordSet
If Not IsNull(LName) Then
    sql = "SELECT ID, Details FROM Projects WHERE Projects.ID=" & id
    set rst = currentdb.openrecordset(sql)
    if rst.recordcount = 0 then
        rst.addnew
    else
        rst.edit
    endif
    rst(0)=id
    rst(1)=Lname
   rst.update
endif
 
Michel,

Punt 1 kan ik volgen als je het hebt over de waarde vanuit de tabel naar het formulier brengen. Klopt, alles wat ik in de tabel zet komt terug in het formulier (textbox in formulier in mijn geval). Andersom, dus text aanpassen in de textbox wat weer (via code) wordt opgeslagen in de tabel is dus nu het probleem.

De aanpassing die je hebt gemaakt naar If Not LName = vbNullString Then geeft nog steeds dezelfde foutmelding op de regel Details.Execute sql. Hij vraagt om een verwijzing naar een tabel..


Hi Rene,

Thanks maar ook jou variant geeft dezelfde melding op de regel CurrentDb.Execute (sql).

Bijgaand een voorbeeld waarin de foutmelding staat
 

Bijlagen

Hi Rene, Thanks maar ook jou variant geeft dezelfde melding op de regel CurrentDb.Execute (sql).
Dat lijkt me sterk, want in mijn variant hebt je niet eens een CurrentDB.execute nodig (staat er ook niet!)
PS Net je file gedownload maar die zegt dat de .zip file niet compleet is.
 
Laatst bewerkt:
Ik zie die regel wel staan bij jou Rene

Nogmaals het bestand, deze moet goed zijn..
 

Bijlagen

Reden dat het niet werkt is omdat je ID geen waarde toekent, momentje.
 
Deze doet het wel
Code:
Private Sub Command4_Click()

Dim rst As Recordset
Dim bAddRecord As Boolean

    sql = "SELECT ID, Details FROM Projects WHERE Projects.ID=" & Me.Combo6
    Set rst = CurrentDb.OpenRecordset(sql)
    If rst.RecordCount = 0 Then
        rst.AddNew
        rst(0) = Me.Combo6
    Else
        rst.Edit
    End If
    rst(1) = Me.TextDetails
    rst.Update

End Sub
 

Bijlagen

Hi Rene,


Dat is hem iid!
Zie dat ik alleen wel een beperking heb in de hoeveelheid tekst die ik kan toevoegen. OP een gegeven moment krijg ik de melding dat de Field to small is.
Heeft dit betrekking op de field in de tabel en kan ik dit simpel oplossen?

Thanks
 
Je hebt het Details veld nu op Text(255) staan. Dat is het maximale voor een tekst veld in Access, anders zul je er een Memo veld van moeten maken. En die kan dan dacht ik tot 65K.
 
Ja ik had het gezien en dit werkt idd.
Thanks Rene, ik kan weer verder

Michael, Jij ook bedankt voor je hulp!
 
HI Rene, iemand,


terug komend op bovenstaande waarbij een gebruiker inmiddels de tekst kan updaten en saven, ik zoek nu naar de aanpassing in het schript zodat er meerdere tekst boxen tegelijk kunnen worden geupdate en gesaved.
Voor de duidelijkheid; Ik heb bv 5 tekstboxen die allen met verschillende updates bewaard moeten kunnen worden dmv een command button.

Zelf heb ik eea geprobeerd door de SQL regel te kopieeren en aan te passen maar dit werkt niet. Hij pakt hoe dan ook maar 1 regel...
Ook de regel: rst(1) = me.text1000 dupliceren werkt ook niet...

Code:
Private Sub Command975_Click()

Dim rst As Recordset
Dim bAddRecord As Boolean

    SQL = "SELECT ID, DetailsService FROM Airfreight WHERE Airfreight.ID=8"
    Set rst = CurrentDb.OpenRecordset(SQL)
    If rst.RecordCount = 0 Then
        rst.AddNew
        'rst(0) = Me.ID = 8
    Else
        rst.Edit
    End If
    rst(1) = Me.Text1000
    rst.Update


End Sub
 
Wat zou de wereld er beter uitzien als mensen gelijk duidelijk zouden zijn :) Wil je
a) 5 velden tegelijk wegschrijven naar 5 velden in hetzelfde record?
b) 5 velden tegelijk wegschrijven naar één veld in nieuwe records?
c) 5 velden tegelijk wegschrijven naar maximaal 5 verschillende records, waarbij ofwel een nieuw record moet worden aangemaakt, of een bestaande bewerkt?

rst(1) werkt het tweede veld in je recordset bij overigens. En zonder aanpassen van dat getal zul je dus altijd hetzelfde veld bijwerken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan