将(varchar、nvarchar2、varchar2)与QString进行比较
Comparing (varchar, nvarchar2,varchar2) with QString
将varchar、nvarchar2或varchar2与传递给Oracle数据库的QString变量进行比较时出现问题。
CREATE TABLE Korisnici
(
id_korisnika varchar(200) PRIMARY KEY,
ime_korisnika varchar2(200),
prezime_korisnika varchar2(200),
broj_telefona varchar2(30),
adresa_korisnika varchar2(400)
)
/
这是我的程序:
//procedure for updating user
CREATE OR REPLACE PROCEDURE Update_korisnika(
stari_id IN varchar,
novo_ime_korisnika IN varchar2,
novo_prezime_korisnika IN varchar2,
novi_broj_telefona_korisnika IN varchar2,
nova_adresa_korisnika IN varchar2)
IS
BEGIN
UPDATE Korisnici
SET Korisnici.ime_korisnika=novo_ime_korisnika
, Korisnici.prezime_korisnika=novo_prezime_korisnika
, Korisnici.broj_telefona=novi_broj_telefona_korisnika
, Korisnici.adresa_korisnika=nova_adresa_korisnika
WHERE Korisnici.id_korisnika=stari_id;
COMMIT;
END;
/
和qt代码,我在调试时从中发送字符:
//this is for updateing user
void MainWindow::promjeni_korisnika(const QString& id, const QString& ime, const QString& prezime, const QString& broj, const QString& adresa)
{
//parametri
init();
QUrl params;
params.addQueryItem("action","Update_korisnika");
params.addQueryItem("id",id);
params.addQueryItem("ime",ime);
params.addQueryItem("prezime",prezime);
params.addQueryItem("broj",broj);
params.addQueryItem("adresa",adresa);
QByteArray data;
data.append(params.toString());
data.remove(0,1);
QNetworkRequest request;
request.setUrl(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,
QVariant("application/x-www-form-urlencoded"));
manager->post(request, data);
MainWindow::dataList.clear();
Citanje_korisnika();
}
所以我只对使用ID的程序有问题,如何使这一切正常工作。这个ID应该是什么类型的数据,可以进行比较,这样我就可以使用它。
编辑:这是QML函数,它将数据发送到上面的QT函数:
funkcije.promjeni_korisnika(text_input5.text,text_input1.text,text_input2.text,text_input3.text,text_input4.text);
那么脚本的这一部分接受数据:
Update_korisnika($poslani_ar,$id=$_POST['id_korisnika'],$ime=$_POST['ime'],$prezime=$_POST['prezime'],$broj=$_POST['broj'],$adresa=$_POST['adresa']);
然后这个部分调用这个代码:
function Update_korisnika($poslani_ar,$id,$ime,$prezime,$broj,$adresa)
{
$imenik = new Imenik($poslani_ar,$id,$ime,$prezime,$broj,$adresa);
$imenik->Update_korisnika();
}
然后:
function Update_korisnika(){
$query='BEGIN Update_korisnika(:id_korisnika,:ime_korisnika,:prezime_korisnika,:broj_telefona,:adresa);END;';
$result=$this->connector->Exec($this->poslani_argument,$query,$this->id_korisnika,$this->ime_korisnika,$this->prezime_korisnika,$this->broj_telefona,$this->adresa);
//echo $ArrayToXml->toXml($result);
}
最后只有执行所有事情的脚本。我没有放任何构造函数和不必要的东西。这是代码的一部分,例如可以一起工作。
当PHP被触发时,我如何跟踪它。
"一开始id_korisnika是数字,然后我试图改变它作为varchar、nvarchar2、varchar2。但也存在某种问题。我不知道如何在存储过程中跟踪它。调用select时*从SQL中的Korisnici,我可以看到数字3。"
好吧,那么你的实际问题是你把一个数字存储在一个字符串数据类型中。它可能看起来像查询中的3
,但它可能是' 3'
、'3 '
、' 3 '
、'3'
或任何其他三和空间的排列。
所以,只要整理一下你的数据模型。
让我们从记录发送到存储过程的内容开始。如果您修改存储过程以记录传入的数据和更新的行数,您会看到什么?
CREATE TABLE update_proc_log (
id_korisnika varchar2(200),
ime_korisnika varchar2(200),
prezime_korisnika varchar2(200),
broj_telefona varchar2(30),
adresa_korisnika varchar2(400),
rows_updated number,
call_timestamp timestamp
);
CREATE OR REPLACE PROCEDURE Update_korisnika(
stari_id IN varchar,
novo_ime_korisnika IN varchar2,
novo_prezime_korisnika IN varchar2,
novi_broj_telefona_korisnika IN varchar2,
nova_adresa_korisnika IN varchar2)
IS
l_rows_updated integer;
BEGIN
UPDATE Korisnici
SET Korisnici.ime_korisnika=novo_ime_korisnika
, Korisnici.prezime_korisnika=novo_prezime_korisnika
, Korisnici.broj_telefona=novi_broj_telefona_korisnika
, Korisnici.adresa_korisnika=nova_adresa_korisnika
WHERE Korisnici.id_korisnika=stari_id;
l_rows_updated := sql%rowcount;
INSERT INTO update_proc_log( id_korisnika ,
ime_korisnika ,
prezime_korisnika ,
broj_telefona ,
adresa_korisnika ,
rows_updated ,
call_timestamp )
VALUES( stari_id,
novo_ime_korisnika,
novo_prezime_korisnika,
novi_broj_telefona_korisnika,
nova_adresa_korisnika ,
l_rows_updated,
systimestamp );
COMMIT;
END;
/
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 将 Qvector<uint8_t> 转换为 QString
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 比较字符数组
- 将模板化的类型与C++中的某些类/类型进行比较
- C++自定义比较函数
- 如何比较自定义类的std::变体
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- std::设置自定义比较器
- 布尔比较运算符是如何在C++中工作的
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 将 nullptr QVariant 与空 QString 进行比较,在 Qt5.9 和 Qt5.12 中给出了不同的输
- 如何比较两个QString阵列Qt C++
- 从QString中提取字符并进行比较
- QString::compare() vs 将 QString 转换为数字然后进行比较
- 如何比较两个 Qstring
- 有效地比较QString和std::string是否相等
- 将(varchar、nvarchar2、varchar2)与QString进行比较
- 比较单个单词与qstring数组