PM-format
Jag har en tabell i Access där en kolumn är av formatet PM. Jag vill göra en utskrift till Word på selekterade poster och använder då det "gamla hedliga" recordset. Hur får jag ett texten i PM-fältet till Word?
Övriga fält går med
Word.Selection.TypeText RS.Fields("ovrigt").Value
Svara
Sv: PM-format
Prova:
Word.Selection = rst.Fields("ovrigt")
Word.Selection.Collapse wdCollapseEnd
det ger samma funktion som i TypeText. För snabbare och snyggare hantering kan du kolla VBA-hjälpen om användning av Range istället för Selection
/Åsa H
Svara
Sv: PM-format
Efter första raden är den infogade texten markerad. Om du då går vidare och infogar innehållet i nästa fält så ersätter det den första texten. Collapse gör att insättningspunkten hamnar efter det som infogades precis som vid TypeText.
Svara
Sv: PM-format
Detta funkar om kolumnerna är av textformat
If rsSokning.Fields("kungligt").Value <> Empty Then
Word.Selection.TypeText rsSokning.Fields("kungligt").Value
End If
Word.Selection.TypeText (vbCrLf)
Word.Selection.TypeText (vbCrLf)
If Not IsNull(rsSokning.Fields("ovrigt").Value) Then
Word.Selection.TypeText rsSokning.Fields("ovrigt").Value
End If
Word.Selection.TypeText (vbCrLf)
Word.Selection.TypeText (vbCrLf)
If Not IsNull(rsSokning.Fields("namn").Value) Then
Word.Selection.TypeText rsSokning.Fields("namn").Value
End If
men alltså inte när de är av PM-format
att sätta
Word.Selection = rst.Fields("ovrigt")
Word.Selection.Collapse wdCollapseEnd
ger mig ingen skillnad, det blir bara tomt där PM-fältets text skulle vara.
Svara
Sv: PM-format
Hejsan
Det är inte så att du måste läsa ut datat i "chunks" ?
Ofta så vid blob-fält (Binary Large OBject)
Har ingen bra exempelkod, men sök på blob på tips o trix så hittar du litegrann
Har själv använt denna teknik, dock med SQL-Server.
/Johan
Svara
Sv: PM-format
Jag hittade ett ställe och prövade med olika varianter på
Word.Selection.TypeText rsSokning("ovrigt").GetChunk(500)
men det blir ingeting ändå. Använder jag GetChunk på rätt sätt?
Svara
Sv: PM-format
Tror du bör lagra datat lokalt först.
Kör du samma stuk med "If Not IsNull" så tömmer den datat då.
Word.Selection.TypeText får då ingenting att jobba med
/Johan
Svara
Sv: PM-format
Jag förstår inte detta. Om jag använder If Not IsNull på textformaterat så funkar det, alltså TypeText får något att jibba med. Varför skulle det inte funka med PM-format och hur kolla man då om det fältet är tomt?
Vad menar du med att lagra datat lokalt?
Svara
Sv: PM-format
Om du först kontrollerar datat med
If Not IsNull
så försvinner det.
Det första man gör är istället att spara undan det lokalt.
<code>
Dim strDatat as String
strDatat = rsSokning("ovrigt").GetChunk(500)
If Not IsNull(strDatat) Then
Word.Selection.TypeText strDatat
End If
</code>
Dessutom bör man kunna hämta storleken på datat så GetChunk kan få rätt storlek istället för att hårdkoda 500. Om så är fallet kan också jämförelsen göras Storlek > 0.
Måste sticka nu - hade testat själv innan jag postade detta inlägg annars...
/Johan
Svara
Sv: PM-format
När jag skriver
strDatat = rsSokning("ovrigt").GetChunk(500)
får jag felmeddelandet
En OLE-DB åtgärd i flera steg generrade fel. Kontrollera alla OLE-DB statusvärden som finns tillgängliga.
Sätter jag samma kod med fältet formaterat som text blir felmeddelandet
Åtgärden är inte tillåten i det här sammanhanget.
Skriver jag
strDatat = rsSokning.Fields("ovrigt").Value
får jag felmeddelandet
Invalid use of Null
fast det inte finns några tomma fält.
Det verkar svårt att få in datat i en lokal variabel.
Svara
Sv: PM-format
Hmmm...
Nu har jag testkört med både DAO 3.51 och ADO 2.5 från VB6 mot en Access97 db.
Använde mig av "rsSokning.Fields("ovrigt").Value" och det verkar funka.
Får inte fel oavsett hur jag gör, varken med null-värden eller med långa strängar.
Observera att jag inte kört med Word utan kastat in datat i en sträng-variabel.
Noterade också att metoden GetChunk tar två parametrar i DAO (Offset, Length)
och en i ADO (Length)
Aha - om det första värdet är null får jag det där.
Testa :
<code>
Dim strDatat as String
strDatat = ""
...
strDatat = strDatat & rsSokning.Fields("ovrigt").Value
...
Word.Selection.TypeText strDatat
</code>
/Johan
Svara
Sv: PM-format
Nu blir det inget felmeddelande men det blir heller inget som skrivs i Word så länge det är PM-format.
Svara
Sv: PM-format
Ok, men innehåller posten något då, tänkte på felmedd med null förut.
Hos mig blir det en tom sträng av "strDatat = strDatat & NULL"
Långskott :
Datat innehåller tecken som Word inte kan (vill) tolka t.ex. ASCII-kod noll.
/Johan
Svara
Sv: PM-format
Det står bara ett namn i fältet och som sagt så kommer namnet in i Worddokumentet om man ändar formatet till text.
Svara
Sv: PM-format
Är det kanske så att det lagras som Unicode i Access ?
Word borde väl greja det iofs men...
Har du kollat PM-fältets innehåll (i debug eller msgbox eller så) ?
/J igen
Svara
Sv: PM-format
efter läget
strDatat = strDatat & rsSokning.Fields("ovrigt").Value
är strDatat tom
Svara
Sv: PM-format
Märkligt !
Testade ju tidigare idag och det funkade klockrent, även på mycket data (typ 3kB).
Natti, natti
Svara
Sv: PM-format
Morning
Testade precis med DAO 3.6 - får data hur fint som helst
<code>
If Not IsNull(rsSokning.Fields("ovrigt").Value) Then
strDatat = rsSokning.Fields("ovrigt").Value
End If
</code>
Kan du inte posta hela kodsnutten ?
/Johan
Svara
Sv: PM-format
OK här är hela koden. I command1 hämtas data från databasen och i Command2 skall det skrivas till Word
Option Explicit
Dim Word As Word.Application
Dim Doc As Word.Document
Dim strDatat As String
Dim op As Boolean
Dim varSokvag As String
Dim conn As New ADODB.Connection
Dim sql As String
Dim rsSokning As New ADODB.Recordset
Private Sub Command1_Click()
If op = True Then
conn.Close
End If
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=d:\historia\data.mdb;uid=Admin" 'Öppnar en koppling mot databasen
op = True
sql = "select * from historia , person where historia.year =" & Combo1.Text & "And historia.Year = person.Year"
Set rsSokning = conn.Execute(sql)
Text1.Text = Text1.Text & rsSokning.Fields("kungligt").Value
Text2.Text = Text2.Text & rsSokning.Fields("ovrigt").Value
Text3.Text = Text3.Text & rsSokning.Fields("namn").Value
End Sub
Private Sub Command2_Click()
Set Word = CreateObject("Word.Application")
Set Doc = Word.Documents.Add
strDatat = ""
If rsSokning.Fields("kungligt").Value <> Empty Then
Word.Selection.TypeText ("Detta hände när " & rsSokning.Fields("namn").Value) & " föddes" 'Rubrik i rapporten
Word.Selection.TypeText (vbCrLf)
Word.Selection.TypeText (vbCrLf)
End If
strDatat = strDatat & rsSokning.Fields("kungligt").Value
Word.Selection.TypeText strDatat
Word.Selection.TypeText (vbCrLf)
Word.Selection.TypeText (vbCrLf)
If Not IsNull(rsSokning.Fields("ovrigt").Value) Then
Word.Selection.TypeText rsSokning.Fields("ovrigt").Value
End If
Word.Selection.TypeText (vbCrLf)
Word.Selection.TypeText (vbCrLf)
If Not IsNull(rsSokning.Fields("namn").Value) Then
Word.Selection.TypeText rsSokning.Fields("namn").Value
End If
Word.Visible = True
conn.Close
op = False
End Sub
Svara
Sv: PM-format
Varför har du två knappar?
<code>
Option Explicit
Private mNamn As String
Private mÖvrigt As String
Private mKungligt As String
Private Sub Command1_Click()
Dim rs As ADODB.Recordset
Dim conn As ADODB.Connection
Dim strSQL As String
Set conn = New ADODB.Connection
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=d:\historia\data.mdb;uid=Admin" 'Öppnar en koppling mot databasen
strSQL = "SELECT *" & vbCrLf & _
"FROM historia INNER JOIN person ON historia.Year = person.Year" & vbCrLf & _
"WHERE historia.year = " & Combo1.Text
Set rs = New ADODB.Recordset
rs.Open strSQL, conn
If rs.EOF Then
Text1.Text = vbNullString
Text2.Text = vbNullString
Text3.Text = vbNullString
Else
mKungligt = & rs("kungligt")
Text1.Text = mKungligt
mÖvrigt = "" & rs("ovrigt")
Text2.Text = mÖvrigt
mNamn = "" & rs("namn")
Text3.Text = mNamn
End If
rs.Close
conn.Close
End Sub
Private Sub Command2_Click()
Dim Word As Word.Application
Dim Doc As Word.Document
Set Word = CreateObject("Word.Application")
Set Doc = Word.Documents.Add()
If Len(mKungligt) Then
'**
'* Rubrik i rapporten
'**
Word.Selection.TypeText ("Detta hände när " & mNamn & " föddes" & vbCrLf & vbCrLf
End If
Word.Selection.TypeText mKungligt & vbCrLf & vbCrLf
If Len(mÖvrigt) > 0 Then
Word.Selection.TypeText mÖvrigt & vbCrLf & vbCrLf
End If
If Len(mNamn) > 0 Then
Word.Selection.TypeText mNamn
End If
Word.Visible = True
End Sub
</code>
Svara
Sv: PM-format
Tjena igen
Du kör ADO, enligt min mening inte "det gamla hederliga sättet".
Mina testkörningar med DAO har varit ganska värdelösa
Vilken version av ADO kör du ?
/Johan
Svara
Sv: PM-format
Jag har två knappar för att jag vill söka först och sedan välja om jag vill skriva ut. Det skall bli så man skall kunna göra fler sökningar och sedan skriva ut allt. Jag vill få det att funka först innan jag fixar med utseendet. Jag skall testa din kod och återkommer. Hoppas den här tråden kan få ett slut nu.
Svara
Sv: PM-format
Jag menar med "gamla hedeliga sättet" att jag använder recordset. Numera skall det ju vara ADO.NET med dataadaper och dataset. Men skall man distribuera ett program så går det åt Net framework på 20 Mb utöver programmet om man gör det i VB.Net
Därför fortsätter jag med "det gamla hederliga recordset"
Hur får man reda på vilken verson man kör?
Svara
Sv: PM-format
Inte för att jag förstår varför men NU FUNKAR DET!!
Tack snälla Andreas och XAdjo
Svara
Sv: PM-format
Hej igen
Ta bort raderna
<code>
Text2.Text =....
If Not Isnull(rsSokning.Fields("ovrigt").Value)
End If
</code>
och ändra till
<code>
strDatat = "" & rsSokning.Fields("ovrigt").Value
Word.Selection.TypeText strDatat
</code>
så funkar det
/Johan
Svara