在Delphi中如何使用SQL自定义函数,参数怎样传递给自定义函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Delphi中如何使用SQL自定义函数,参数怎样传递给自定义函数?相关的知识,希望对你有一定的参考价值。
1如不雅是直接应用萌芽语句就用adoquery,直接adoquery.sql.txt:=
'your
proc
txt'
或
sql.add()也可以,可以直接在your
txt琅绫擎给参数赋值,然后open就履行啦如不雅是调用sql
server
中的存储过程,那么应用adostoredproc控件就行,先设置procedurename:=‘your
proc
name’;refresh
一下,parameters.parambyname('your
parameter
name').value:=your
value;就可以传参了,execproc就履行了; 参考技术A 呵呵 这个怎麼说呢 其实功能跟你的连接SQL一样的
首先你必须要有传输值 一般我们在SQL存储过程中设置(针对一般计算的存储过程,发邮件就除外),在delphi裏面你直接用一个ADO 连接下就可以了 不是select
而是exec !本回答被提问者和网友采纳 参考技术B 如果是调用SQL server 中的存储过程,那么使用ADOStoredProc控件就行,先设置ProcedureName:=‘your proc name’;refresh 一下,Parameters.ParamByName('your parameter name').Value:=your value;就可以传参了,execProc就执行了;
如果是直接使用查询语句就用AdoQuery,直接ADoQuery.SQL.Txt := 'your proc Txt' 或 SQL.Add()也可以,可以直接在your Txt里面给参数赋值,然后open就执行啦 参考技术C Delphi的SQL语句传递参数,参数必须写成 :参数,举个例子吧
select * from user where id=:num
如何在 JNI 中使用自定义类类型参数调用 Java 函数
【中文标题】如何在 JNI 中使用自定义类类型参数调用 Java 函数【英文标题】:How to call a Java function in JNI with custom class type argument 【发布时间】:2021-07-05 06:51:23 【问题描述】:我正在尝试使用自定义类类型参数从 C++ 调用 Java 函数。问题是从 C++ 调用 Java 函数时会得到垃圾值(代码如下所示)。如果我使用任何其他数据类型(String、float、int)的参数,则相同的函数printClassVar
可以正常工作。
这是Java代码
/*Filename: CallbacksExample.java*/
public class CallbacksExample
static
System.loadLibrary("myjni");
public static void main(String[] args)
new CallbacksExample().callback();
public native void callback();
public static void printClassVar(Person person)
System.out.println("Got callback from C++: " + person.age );
/*Filename: Person.java*/
public class Person
public int age;
public Person()
this.age = 20;
public int value()
return age;
这是 JNI 代码
/*Filename: CallbacksExample.cpp*/
#include <iostream>
#include <jni.h>
#include "CallbacksExample.h"
using namespace std;
class Person
int age;
public:
Person()
age = 5;
int value()
return age;
;
JNIEXPORT void JNICALL
Java_CallbacksExample_callback(JNIEnv *env, jobject jthis)
jclass thisClass = env->GetObjectClass(jthis);
Person _per;
Person* class_ptr = &_per;
std::cout << class_ptr->value() << std::endl;
jmethodID printClassVar = env->GetStaticMethodID(thisClass, "printClassVar", "(LPerson;)V");
if (NULL == printClassVar)
return;
env->CallVoidMethod(jthis, printClassVar, &class_ptr);
以上代码返回
从 C++ 获得回调:1679598160(或任何垃圾签名的 int 值)
【问题讨论】:
JNI 不是这样工作的。它不会自动将 C++ 对象转换为 Java 对象。您必须构造一个新的 JavaPerson
(使用 FindClass
、NewObject
),然后在其上设置各种字段(或添加一个获取字段初始值的构造函数)。
【参考方案1】:
这是在 C++ 中调用具有类类型参数的 Java 函数的正确方法
/*Filename: CallbacksExample.java*/
public class CallbacksExample
static
System.loadLibrary("myjni");
public static void main(String[] args)
new CallbacksExample().callback();
public native void callback();
public static void printClassVar(Person person)
System.out.println("Got callback from C++: " + person.age );
/*Filename: Person.java*/
public class Person
public int age;
public Person()
this.age = 20;
public void set(int x)
age = x;
public int value()
return age;
/*Filename: CallbacksExample.cpp*/
#include <iostream>
#include <jni.h>
#include "CallbacksExample.h"
JNIEXPORT void JNICALL
Java_CallbacksExample_callback(JNIEnv *env, jobject jthis)
jclass thisClass = env->GetObjectClass(jthis);
jclass personClass = env->FindClass("Person");
jmethodID class_constructor = env->GetMethodID(personClass, "<init>", "()V"); // no parameters
jobject personObj = env->NewObject(personClass, class_constructor);
auto personMethod = env->GetMethodID(personClass, "set", "(I)V");
env->CallVoidMethod(personObj, personMethod, 15);
jmethodID printClassVar = env->GetStaticMethodID(thisClass, "printClassVar", "(LPerson;)V");
if (NULL == printClassVar)
return;
env->CallVoidMethod(jthis, printClassVar, personObj);
【讨论】:
以上是关于在Delphi中如何使用SQL自定义函数,参数怎样传递给自定义函数?的主要内容,如果未能解决你的问题,请参考以下文章
delphi如何在一个function自定义函数中调用procedure中的私有变量?
Delphi中Stringlist的自定义排序(将函数地址做为参数)