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를 비교할 수있는 데이터의 유형은 무엇이든지 사용할 수 있습니다.
EDIT : 이 상기 QT 함수로 데이터를 전송 QML 함수이다
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가 실행되면 어떻게 추적 할 수 있습니까?
정확히 무엇이 문제입니까? 저장 프로 시저가 데이터를 업데이트하지 않는 것이 문제라면, 전달되는 'stari_id'를 기록 할 수 있습니까? 전달되는 'stari_id'는 무엇이고 업데이트 될 행의'id_korisnika'는 무엇입니까? 다른 쪽이 아닌 하나의 끝에 공백이 있거나 케이싱에 차이가 있습니까? –
문제는 내가 정상적으로 만들 수있는 항목을 추가하려고 할 때입니다. 그러나 예를 들어 변경 데이터를 업데이트하려고 할 때. old_id (stari_id)를 사용하여 Qstring에서 Qstring ID로 보내야합니다. 아무 일도 일어나지 않습니다. QT와 오라클 간에는 데이터를 처리하지만 스크립트는 정상적으로 작동하는 PHP 스크립트가 있습니다. 오라클과 QT는 캐스팅에 약간의 문제가 있습니다.내가 오라클에 데이터를 게시 할 때 디버깅하고 예를 들어 id_user (id_korisnika)를 '3'으로 보냈습니다. 하지만 아무 것도 업데이트하지 않고 있습니다. –
1)'id_korisnika'가 숫자 인 경우에는 문자열이 아닌 데이터베이스에서'NUMBER'로 정의해야합니다. 2) 전달되는 'STARI_ID'가 전달되는 스토어드 프로 시저에 로깅하고 있음을 나타내시겠습니까? '3'은 선행 또는 후행 공백이 없으며'Korisnici' 테이블을 쿼리하고 'id_korisnika'가 '3'이고'UPDATE' 문이 행을 업데이트하지 않는다고? –