Är det nån som vet varför en funktion i vb kan returnera ett ADODB.Recordset, men inte ett DAO.Recordset? <br>För att läsa inlägget, klicka här: Klicka här Jag tror att jag vet vad jag gjort för fel Andreas, förstår inte riktigt ditt inlägg..... <br>För att läsa inlägget, klicka här: Klicka här Vad händer? <br>För att läsa inlägget, klicka här: Klicka här Har löst problemet PRoblemet är att i DAO måste du hålla objekt herkin vid liv. Efter som din workspace bara lever i funktionen kommer då oxå bara ditt recordset att göra det.  Tack Anders! Du kan göra vilket som. Gjorde bara så i exemplet. Men du måste hålla anslutningen öppen så länge du använder recordsetet. Därför är det mer lämpligt att göra så i DAO. Blir så mycket kod. Beror på hur man prioriterar prestanda.Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    
Det fungerar att ha en funktion i en modul som returnerar ADODB, men ändrar jag det till DAO så dör recordset innan jag har skickat tillbaks det med funktionen.
Måste tyvärr använda DAO objektet.....
TIASv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    Sv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    
Jag tror att jag glömt Set FuncName = rs i slutet av funktionen det står säkert bara "FuncName = rs". skall kolla imorgonSv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    
Problemen kvarstår, det verkar inte som om jag kan ha en function som returnerar ett dao.recordset.
Kallande funktion
<code>
Private Sub Command5_Click()
    Dim rsx As dao.Recordset
    
    Set rsx = zz()
    
    lbl.Caption = ""
'************
'  raden nedanför får jag felmeddelande
' Error 3420
' Object invalid or no longer set
'************    
    Do Until rsx.EOF
      lbl.Caption = lbl.Caption & rsx(0) & vbCrLf
      rsx.MoveNext
    Loop
    
    rsx.Close
</code>
Dbaccess function
<code>
Function zz() As dao.Recordset
  Dim db As dao.Database
  Dim ws As dao.Workspace
  Dim rs As dao.Recordset
  
  Set ws = DBEngine.CreateWorkspace("", "", "", dbUseODBC)
  ' måste använda fildsn eftersom vi inte kan installera dsn på servern
  Set db = ws.OpenConnection("", dbDriverNoPrompt, False, "ODBC;DATABASE=ass_test;FileDSN=" & App.Path & "\waydsn.dsn;UID=sa;PWD=")
  'Set rs = db.OpenRecordset("select * from ort") ', DAO.dbOpenDynaset, DAO.dbExecDirect, DAO.dbOptimisticValue)
  Set rs = db.OpenRecordset("sp_WAY_SearchUser 'p'")
 ' Här har jag ett recordset som innehåller data
  Set zz = rs
End Function
</code>Sv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    Sv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    
Varför lägger ni in en länk till detta inlägg?Sv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    Sv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    
Jag skickar in en array till funktionen som jag fyller genom att köra: rsRecordset.GetRows()
/UffeSv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    
Testa:
<code>
Private db As dao.Database 
Private ws As dao.Workspace 
Private Sub Form_Load()
    Set ws = DBEngine.CreateWorkspace("", "", "", dbUseODBC) 
    Set db = ws.OpenConnection("", dbDriverNoPrompt, False, "ODBC;DATABASE=ass_test;FileDSN=" & App.Path & "\waydsn.dsn;UID=sa;PWD=") 
End Sub
Private Sub Form_UnLoad()
    db.Close
    Set db = Nothing
    ws.Close
    Set ws = Nothing
End Sub
Private Sub Command5_Click() 
Dim rsx As dao.Recordset 
   Set rsx = zz(db) 
    
   lbl.Caption = "" 
   Do Until rsx.EOF 
     lbl.Caption = lbl.Caption & rsx(0) & vbCrLf 
     rsx.MoveNext 
   Loop 
    
   rsx.Close 
End Sub
Function zz(db As dao.Database) As dao.Recordset 
    Set zz = db.OpenRecordset("sp_WAY_SearchUser 'p'") 
End Function 
</code>Sv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    
Detta skulle kunna vara en lösning, men innebär inte denna lösning att man håller en connection mot databasen öppen hela tiden programmet är igång?
Det jag lärt både hör på Pellesoft och nästan överallt annars är väl principen att öppna connection sent, och stänga den fort, eller beter sig Workspace objektet sig annorlunda?Sv: Funktion kan returnera ADODB.Recordset men ej DAO.Recordset?
    
    
<code>
Private Sub Form_Load() 
End Sub 
Private Sub Form_UnLoad() 
End Sub 
Private Sub Command5_Click() 
Dim ws As dao.Workspace 
Dim db As dao.Database 
Dim rsx As dao.Recordset 
   Set ws = DBEngine.CreateWorkspace("", "", "", dbUseODBC) 
   Set db = ws.OpenConnection("", dbDriverNoPrompt, False, "ODBC;DATABASE=ass_test;FileDSN=" & App.Path & "\waydsn.dsn;UID=sa;PWD=") 
  Set rsx = zz(db) 
    
  lbl.Caption = "" 
  Do Until rsx.EOF 
    lbl.Caption = lbl.Caption & rsx(0) & vbCrLf 
    rsx.MoveNext 
  Loop 
    
  rsx.Close 
  db.Close 
  Set db = Nothing 
  ws.Close 
  Set ws = Nothing 
End Sub 
Function zz(db As dao.Database) As dao.Recordset 
   Set zz = db.OpenRecordset("sp_WAY_SearchUser 'p'") 
End Function 
</code>
Att varje gång öppna och stänga recordsetet blir ju då lite knöligt. Kan ju göra så att man kapslar det i en funktion.