Сравнение (varchar, nvarchar2, varchar2) с QString - PullRequest
0 голосов
/ 03 марта 2012

У меня проблема при сравнении varchar, nvarchar2 или varchar2 с переменной QString, которую я передаю в базу данных Oracle.

 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из которого я отправляю char при отладке:

//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, как заставить все это работать.Какой тип данных должен быть этот идентификатор, который можно сравнить, чтобы я мог его использовать.

РЕДАКТИРОВАТЬ: это функция 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.

Ответы [ 2 ]

2 голосов
/ 03 марта 2012

"в начале id_korisnika был как номер, затем я попытался изменить его как varchar, nvarchar2, varchar2. Но есть какая-то проблема. я не знаю, как отследить это в хранимой процедуре. При звонке выберите * от Korisnici в SQL плюс я вижу номер 3. "

Итак, ваша настоящая проблема в том, что вы храните число в виде строкового типа. Это может выглядеть как 3 в запросе, но это может быть ' 3', '3 ', ' 3 ', '3' или любая другая перестановка трех и пробела.

Итак, просто разберитесь с вашей моделью данных.

1 голос
/ 03 марта 2012

Начнем с регистрации того, что отправляется в хранимую процедуру.Если вы измените хранимую процедуру для регистрации передаваемых данных и количества обновленных строк, что вы увидите?

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;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...