我將varchar,nvarchar2或varchar2與傳遞給Oracle數據庫的QString變量進行比較時遇到問題。使用QString比較(varchar,nvarchar2,varchar2)
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();
}
then:
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觸發時追蹤它。
究竟是什麼問題?如果問題在於存儲過程沒有更新任何數據,您能否記錄正在傳入的'stari_id'?什麼是傳入的'stari_id',以及您希望更新的行的id_korisnika是什麼?在一個結尾處是否有空格,或者是否有空格? – 2012-03-02 22:30:33
問題是當我想添加項目時,我可以使它正常。但是當我想更新例如更改數據。我需要使用從QT代碼發送的old_id(stari_id)作爲Qstring id,並且什麼都不會發生。之間的QT和甲骨文我有PHP腳本處理數據,但腳本工作正常。 oracle和QT在投射方面有一些問題。當我將數據發佈到oracle時,我會對其進行調試,並且可以看到我正在將id_user(id_korisnika)作爲「3」發送。但沒有更新 – 2012-03-02 22:38:08
1)如果'id_korisnika'是一個數字,它應該被定義爲數據庫中的NUMBER,而不是字符串。 2)您是否聲明您已登錄存儲過程,該存儲過程指示正在傳入的'STARI_ID'是不帶前導或尾隨空格的字符串'3',並且您可以查詢'Korisnici'表並查看'id_korisnika'爲'3'且'UPDATE'語句沒有更新行? – 2012-03-02 22:53:33