Вообще тема весьма сомнительна...
Добавление строк к в таблицы реляционной БД вопрос весьма не простой и как правило ответственность за это действие передается хранимым процедурам а также процесс удаления строк тоже.
Это связанно с тем что
1) надо обеспечивать корректное добавление с ведением логов, вставкой внешних ключей, вычисляемых столбцов.
2) при изменении структуры таблицы или связей проще править хранимую процедуру чем пере собирать проект и инсталить его на пачке машин.
3) незачем гонять туда сюда промежуточную информацию (вся работа на стороне сервера)
А вот с возвернутом ID записи (после выполнения хранимой процедуры работать просто)
Пример для MS SQL 2005 (есть еще подобный для PostgreSQL)
SQL
CREATE TABLE [my].[Myt](
[MytID] [bigint] IDENTITY(1,1) NOT NULL,
[Surname] [nvarchar](20) NOT NULL,
[FirstName] [nvarchar](20) NOT NULL,
[PersonalTypeID] [smallint] NOT NULL CONSTRAINT [DF_Myt_PersonalTypeID] DEFAULT ((1)),
[RegistrationDate] [datetime] NOT NULL,
CONSTRAINT [PK_Myt] PRIMARY KEY CLUSTERED(
[MytID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE PROCEDURE [my].[AddRecMyt]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO my.Myt
(Surname, FirstName, Patronymic, PersonalTypeID, RegistrationDate)
VALUES
('Не определено', 'Не определено', 'Не определено', 1, GETDATE())
SELECT SCOPE_IDENTITY()
END
Пример конструктора для формы создания новой записи.
C++ (Qt)
Data::Data(QWidget *parent, int MytID):QWidget(parent),ui(new Ui::Data){
ui->setupUi(this);
if(MytID == 0){
QSqlQuery query;
query.exec("my.AddRecMyt");
if(query.first()){
MytID = query.value(0).toInt();
qDebug()<<"Add MytID = "<<MytID;
}
query.clear();
}
......
}
Не совсем по сути вопроса... но может получиться отговорить разработчика
вешать SQL сопли в приложении.