Получение недавно добавленного AutoID MySQL с использованием VBA в MS Access - PullRequest
0 голосов
/ 19 марта 2020

У меня есть приложение MS Access с базой данных MySQL. Я перепробовал множество способов из Переполнения стека, но не могу получить первичный ключ вновь добавленной строки.

Я перепробовал все, что смог найти, но безуспешно.

    Set pxRST = db.OpenRecordset("SELECT * from tblPatients WHERE dispenseID = " & oPxID & " AND ChemistID = " & chemID, dbOpenDynaset, dbSeeChanges)
    if pxrst.eof then
    pxRST.AddNew
    pxRST("dispenseid") = oPxID
    pxRST("chemistID") = chemID
    pxRST("firstname") = firstName
    pxRST("lastname") = lastName
    pxRST("address") = Address
    pxRST("postcode") = postcode
    pxRST("phonenumber") = phonenumber
    pxRST.Update
    pxRST.Bookmark = pxRST.LastModified
    gPxID = pxRST!PatientID
    Debug.Print gPxID

end if

Это дало ошибка "запись удалена"

Я также пытался использовать тот, который имел

gPxID  = currentdb.openrecordset("SELECT @@identity").value(0)

Это просто игра меня 0 в качестве цифры

Я сделал go в MYSQL верстак и попробуйте

INSERT INTO tblpatients
SELECT @@IDENTITY

, и я действительно получил новый идентификатор записи.

Так что я очень старался и так далеко, но я просто не могу понять это из здесь и как заставить это работать в VBA.

В настоящее время я работаю над использованием QueryDefs, но я очень новичок в этом и на самом деле не получил его, я не думаю.

Dim qdf2 As DAO.QueryDef

strSQL = "INSERT INTO tblPatients (dispenseid,chemistID,firstname,lastname,address,postcode,phonenumber) " & _
            "VALUES (" & oPxID & "," & chemID & ",'" & firstName & "','" & lastName & "','" & Address & "','" & postcode & "','" & phonenumber & "' )"

    Set qdf2 = db.QueryDefs("quGetPxDetails")
    With qdf2
    .SQL = strSQL
    .Connect = oCon
    qdf2.Execute

    End With

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Таким образом, мой ответ прибывает из информации ComputerVersteher и User2834566.

Мне пришлось выполнить два запроса, как проходящих, так и запущенных на одном экземпляре БД, чтобы убедиться, что он вернул правильное значение:

Dim strSQL As String
Dim qdf As DAO.QueryDef
Dim db As DAO.Database
Dim rst As DAO.Recordset


strSQL = "INSERT INTO medstome_masterdb.tblChemists (chemName) VALUES ('newchem')"
strGETID = "SELECT @@IDENTITY"


Set db = CurrentDb

    With db
        Set qdf = db.CreateQueryDef("")
            With qdf
                .ReturnsRecords = False
                .Connect = oCon
                .SQL = strSQL
                .Execute
            End With

            With qdf
                .ReturnsRecords = True
                .Connect = oCon
                .SQL = strGETID
                Set rst = .OpenRecordset(dbOpenSnapshot)
                gPxID = rst(0)
                Debug.Print gPxID
            End With
    End With

Это прекрасно работает! Спасибо ребятам, которые откликнулись и помогли

0 голосов
/ 19 марта 2020

Это скорее зависит от того, есть ли у вашего tblPatients первичный ключ с автоинкрементом или нет. Если это так, то вам не следует присваивать ему значение вручную, ie ваш

INSERT INTO tblPatients (dispenseid,chemistID,firstname,lastname,address,postcode,phonenumber) " & _
            "VALUES (" & oPxID & "," & chemID & ",'" & firstName & "','" & lastName & "','" & Address & "','" & postcode & "','" & phonenumber & "' )"

ничего не вставляет в PK.

Допустим, у вас есть столбец в tblPatients с именем PatientID типа int(11) NOT NULL AUTO_INCREMENT,

Теперь, после вставки новой записи, вы можете получить идентификатор этой вставленной записи, используя функцию

LAST_INSERT_ID()

, так что

Select  LAST_INSERT_ID() as my_last_pk;

вернет PK записи, которую вы только что вставили, в столбец с именем my_last_pk.

Обратите внимание, что это спецификация сеанса c, поэтому, если вы и кто-то другой оба вставите новый записывайте более или менее в то же время, когда каждый из вас получит свой вставленный ПК.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...