ADO record copy/paste

ADO record copy/paste
2007-04-21T09:11:19+02:00
2007-04-22T07:55:25+02:00
2022-11-04T08:00:38+01:00
juhist
Sziasztok!

Access "alatt" ADO:

hogyan lehet egy ADO recordset-ből adott (teljes) rekordot egy másik ADO recordset-be másolni?

részleteket már találtam, de az egész még nem állt össze, eki tud kérem segítsen.

köszönöm
Mutasd a teljes hozzászólást!
Összehoztam egy működő kódot, nem kellett végül rekordokat másolgatni, amolyan hibrid megoldás született a lapozáshoz,
íme:

Public Sub FrmRecordBlockMaker(ByVal Frm As Form, ByVal RecordSrc As String, ByVal KeyName As String, _ ByVal PageNumber As Long, ByVal PageSize As Long) Dim rst As ADODB.Recordset Dim rs As ADODB.Recordset Dim strWHERE, PageCount Set rst = New ADODB.Recordset rst.Open RecordSrc, CurrentProject.Connection, adUseClient PageCount = rst.PageCount rst.PageSize = PageSize rst.AbsolutePage = PageNumber strWHERE = "" For intRecord = 1 To PageSize strWHERE = strWHERE & rst.Fields(KeyName).Value & "," rst.MoveNext If rst.EOF Then Exit For Next intRecord rst.Close Set rst = Nothing Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.Open "SELECT * FROM (" & RecordSrc & ") WHERE " & KeyName & " IN (" & strWHERE & ")", CurrentProject.Connection Set Frm.Recordset = rs Set rs = Nothing Frm.Requery Frm.Controls("FrmRecordBlockPrev").Visible = (PageNumber <> 1) Frm.Controls("FrmRecordBlockFirst").Visible = (PageNumber <> 1) Frm.Controls("FrmRecordBlockNext").Visible = (PageNumber < PageCount) Frm.Controls("FrmRecordBlockLast").Visible = (PageNumber < PageCount) End Sub

Jó gyors
Mutasd a teljes hozzászólást!

  • Szerintem csak mezőnként.
    Ez lehet for ciklussal vagy név alapján.
    Mutasd a teljes hozzászólást!
  • Copy/Paste nem működik. A cél rekordset-hez vagy hozzá kell adnod egy új sort (AddNew) és abba mezőnkénti értékadással bevinni az adatokat (for each ciklussal végig lépkedsz a Fields gyűjteményen), vagy pedig meg kell keresned a felülírni kívánt rekordot és ott lépkedsz végig a mezőkön.
    Mutasd a teljes hozzászólást!
  • Ettől 1/2tem...
    deha csak így, akkor így.
    Mutasd a teljes hozzászólást!
  • For each in fields collection ...

    így sem olyan ronda,

    egyébként folyamatos űrlap rekordkészletének elkészítéséhez/beállításához szükségeltetik...
    Egy (jó nagy) eredményhalmazban kellene-tudjak "lapozgatni". Az ADO PageSize, PageCount, AbsolutePage "eszközei" lehetőséget adnak a pozícionálásra, már csak a rekordkészlet elkészítését kell megoldani. Ezért a té-ma,

    Eddig "SELECT TOP WHERE NOT IN ()" formáció segítségével állítottam elő a megadott sorszámú lapot, de ettől a gép egy bizonyos határon túl roppant összeroppan. Reménykedem, hogy az ADO jobb megoldás lesz. Úgy érzem igen



    Mutasd a teljes hozzászólást!
  • És ha a
    SELECT TOP WHERE NOT IN ()"
    helyett

    SELECT TOP on tábla1 left join tábla2 on tábla1.kapcs = tábla2.kapcs where tábla2.kapcs is null

    formát használnád?

    Vagy egy hozzáfűző lekérdezést a rekordok másolására?
    Mutasd a teljes hozzászólást!
  • gondoltam rá anno, hogy mondod ki is próbálom

    még leköt a gyerek csak gyűjtögetni van időm



    Mutasd a teljes hozzászólást!
  • Összehoztam egy működő kódot, nem kellett végül rekordokat másolgatni, amolyan hibrid megoldás született a lapozáshoz,
    íme:

    Public Sub FrmRecordBlockMaker(ByVal Frm As Form, ByVal RecordSrc As String, ByVal KeyName As String, _ ByVal PageNumber As Long, ByVal PageSize As Long) Dim rst As ADODB.Recordset Dim rs As ADODB.Recordset Dim strWHERE, PageCount Set rst = New ADODB.Recordset rst.Open RecordSrc, CurrentProject.Connection, adUseClient PageCount = rst.PageCount rst.PageSize = PageSize rst.AbsolutePage = PageNumber strWHERE = "" For intRecord = 1 To PageSize strWHERE = strWHERE & rst.Fields(KeyName).Value & "," rst.MoveNext If rst.EOF Then Exit For Next intRecord rst.Close Set rst = Nothing Set rs = New ADODB.Recordset rs.CursorLocation = adUseClient rs.Open "SELECT * FROM (" & RecordSrc & ") WHERE " & KeyName & " IN (" & strWHERE & ")", CurrentProject.Connection Set Frm.Recordset = rs Set rs = Nothing Frm.Requery Frm.Controls("FrmRecordBlockPrev").Visible = (PageNumber <> 1) Frm.Controls("FrmRecordBlockFirst").Visible = (PageNumber <> 1) Frm.Controls("FrmRecordBlockNext").Visible = (PageNumber < PageCount) Frm.Controls("FrmRecordBlockLast").Visible = (PageNumber < PageCount) End Sub

    Jó gyors
    Mutasd a teljes hozzászólást!
  • Jó gyors, csak az ererdeti témához nem sok köze van
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd