为什么 ms-access sql Pass Through 在 VBA 中不起作用

问题描述

我目前正在尝试在 Access 2016 中使用 VBA 编写一个选择传递查询。如果我通过按钮 Pass-Through 使用手动选项并手动分配 dsn,则以下语句有效。

manual pass through

SELECT top 1 dat_Kunden.Kunden_Status FROM dat_Kunden

我想传递的 sql 正在改变,所以我想创建一个 VBA 函数来执行它。

这是我当前执行给定sql语句的函数

Function CreateSPT(strSQL As String)

Dim qdf As DAO.QueryDef,rs As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = "ODBC;Driver=SQL Server;SERVER=xxx;DATABASE=yyy;UID=zzz"    'in the code this is the real data
qdf.SQL = strSQL
qdf.ReturnsRecords = True

Set rs = qdf.OpenRecordset()
If Not (rs.BOF And rs.EOF) Then rs.MoveFirst
    Do Until rs.EOF
        Debug.Print rs.Fields(0)
        rs.MoveNext
    Loop


rs.Close
Set rs = Nothing
Set qdf = Nothing

End Function

这确实有效。

Sub test_sql()
SQL = "SELECT CONVERT( date,GETDATE() ) AS qryTest"
CreateSPT (SQL)
End Sub

这个通过手动传递起作用的语句不起作用

Sub test_sql2()
SQL =  "SELECT top 1 dat_Kunden.Kunden_Status FROM dat_Kunden  AS qryTest"
CreateSPT (SQL)
End Sub

错误代码是运行时错误“3146”:ODBC -- 在这一行调用失败:

Set rs = qdf.OpenRecordset()

我希望你知道我的错误在哪里......谢谢大家,从你们那里学到了很多东西!

解决方法

如果您提供别名,请使用它:

/**
 * @return Response
 * @Route("/{id}",methods={"PUT"})
 * @param $id
 * @param Request $request
 */
public function edit($id,Request $request): Response
{
    $em = $this->getDoctrine()->getManager();
    $article = $em->find(Article::class,$id);
    if ($article)
    {
        $request->request->add(["article" => json_decode($request->getContent(),true)]);
        $form = $this->createForm(ArticleType::class,$article,array(
            'method' => 'put'
        ))->handleRequest($request);
        if ($form->isSubmitted())
        {
            if ($form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $em->persist($form->getData());
                $em->flush();
                return $this->json($form->getData(),201);
            }
            return $this->json(["error" => "on isValid"],400,array($form->getErrors()));
        }
        return $this->json(["error" => "on isSubmitted"],array($form->getErrors()));
    }
    return $this->json(["error" => "Not Found"],404);
}

或忽略它:

SQL = "SELECT Top 1 qryTest.Kunden_Status FROM dat_Kunden AS qryTest"

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...