Vertabanlarında otomatik artan kayıt numaraları sıkça kullanılıyor! Ancak kaydın yazılması anında oluşan bu numarayı anlık olarak bilmek zor!
Ya kaydı kilitleyeceksiniz veya son numara sayacını hemen yazmanın ardından okuyacaksınız?! PostgreSQL’de bu işlemi yazma anında öğrenmemizi sağlayan ve doğrudan SQL cümlesine eklenebilecek bir komut olduğunu Linux-programlama listesindeki değerli arkadaşlardan öğrendim.
SQL cümlesinin sonuna RETURNING eklemek yetiyor. RETURNING sira_No gibi bir ekleme ile otomatik artan ve ismi sira_No olan değişkeni aynı anda çekebiliyorsunuz.
Qt/C++ ile kullandığım kod örneği aşağıda… 🙂
kayit_Ekle.prepare("INSERT INTO public.faaliyet_raporu(faaliyet_tarihi, kullanici_kod, faaliyet_icerik, sanayi_sicil_no," "yer, iletisim_tel, iletisim_eposta, iletisim_diger, faaliyet_notlar, " "faaliyet_sonuclar) " "VALUES (:faaliyet_tarihi, :kullanici_kod, :faaliyet_icerik, :sanayi_sicil_no, " " :yer, :iletisim_tel, :iletisim_eposta, :iletisim_diger, :faaliyet_notlar, " ":faaliyet_sonuclar) RETURNING sira_no;"); kayit_Ekle.bindValue(":faaliyet_tarihi", ui->dateEdit->date()); kayit_Ekle.bindValue(":kullanici_kod", data.toString()); kayit_Ekle.bindValue(":faaliyet_icerik", ui->lineEdit_Faaliyet_Isim->text()); kayit_Ekle.bindValue(":sanayi_sicil_no", ui->lineEdit_Kurum_No->text()); kayit_Ekle.bindValue(":yer", ui->lineEdit_Yer->text()); kayit_Ekle.bindValue(":iletisim_tel", ui->lineEdit_Tel->text()); kayit_Ekle.bindValue(":iletisim_diger", ui->lineEdit_Diger->text()); kayit_Ekle.bindValue(":iletisim_eposta", ui->lineEdit_Eposta->text()); kayit_Ekle.bindValue(":faaliyet_notlar", ui->plainTextEdit_Notlar->toPlainText()); kayit_Ekle.bindValue(":faaliyet_sonuclar", ui->plainTextEdit_Sonuclar->toPlainText()); if(kayit_Ekle.exec() && kayit_Ekle.first()) { ui->lineEdit_SiraNo->setText(kayit_Ekle.value(0).toString()); QMessageBox::information(this, "İşlem Tamam :)", "Kayıt başarı ile tamamlandı.", QMessageBox::Ok); } else QMessageBox::critical(this, "Hata", "Kayıt tamamlanamadı\n" + kayit_Ekle.lastError().text(), QMessageBox::Ok); }