Сформируем диалог, который покажет таблицу из большой таблицы из базы данных PostgreSQL.

Параметры подключения:

Сервер - localhost

Имя пользователя - labpp_user_ivanov

Пароль пользователя - pspsps

Имя базы данных (схемы) - LABPP_ERM

Номер порта для подключения (обычно) - 5432;



int iListBox_MD, iButton_Ok_MD;

int iTable_MD;

int iDialog_MD;


int main()
{
       int iPostgreSQL;
       object("create", "ts_dbpostgresql", iPostgreSQL);
       int ires;
       ires = ts_dbpostgresql(iPostgreSQL, "init");
       if (ires != 0) {
               return -1;
       }
       cout << "init success\n";

       ires = ts_dbpostgresql(iPostgreSQL, "pqconnectdb", "user=labpp_user_ivanov password=pspsps host=localhost port=5432 dbname=LABPP_ERM target_session_attrs=read-write");
       if (ires != 0) {
               return -1;
       }
       cout << "connection success\n";

       ires = ts_dbpostgresql(iPostgreSQL, "pqexec", "BEGIN");
       if (ires != 0) {
               return -1;
       }
       cout << "begin transaction success\n";

       ts_dbpostgresql(iPostgreSQL, "pqclear");

       ires = ts_dbpostgresql(iPostgreSQL, "pqexec", "DECLARE myportal CURSOR FOR select * from pg_type");
       if (ires != 0) {
               return -1;
       }
       cout << "creating cursor success\n";
       ts_dbpostgresql(iPostgreSQL, "pqclear");

       ires = ts_dbpostgresql(iPostgreSQL, "pqexec", "FETCH ALL in myportal");
       if (ires != 0) {
               return -1;
       }
       cout << "fitch all success\n";

       int nfields = ts_dbpostgresql(iPostgreSQL, "pqnfields");
       coutvar << nfields;

       int ntuples = ts_dbpostgresql(iPostgreSQL, "pqntuples");
       coutvar << ntuples;
       // Считываем в таблицу
       int iTable;
       object("create", "ts_table", iTable);
       ts_dbpostgresql(iPostgreSQL, "export_to_table", iTable);
       string sstr;
       ts_table(iTable, "print_to_str", sstr);
       coutvar << sstr;
       //
       ts_dbpostgresql(iPostgreSQL, "pqclear");

       ires = ts_dbpostgresql(iPostgreSQL, "pqexec", "CLOSE myportal");
       if (ires != 0) {
               return -1;
       }
       cout << "close portal success\n";

       ts_dbpostgresql(iPostgreSQL, "pqclear");

       ires = ts_dbpostgresql(iPostgreSQL, "pqexec", "END");
       if (ires != 0) {
               return -1;
       }
       cout << "end transaction success\n";

       ts_dbpostgresql(iPostgreSQL, "pqclear");

       // Create Dialog
       int x, y, w, h, offset;

       object("create", "ts_dialog", iDialog_MD);
       ts_dialog(iDialog_MD, "init_dialog", "palette", 0, 0, 350, 400);
       ts_dialog(iDialog_MD, "set_as_main_panel");
       ts_dialog(iDialog_MD, "SetGrowType", 3);

       ts_dialog(iDialog_MD, "SetTitle", "Наменования материалов для заказчика");

       object("create", "ts_dialogcontrol", iListBox_MD, "iListBox_MD");

       ts_dialogcontrol(iListBox_MD, "init_control", "singlesellistbox", iDialog_MD, 5, 5, 340, 350, 48, 20);
       ts_dialogcontrol(iListBox_MD, "SetAnchorToPanelResize", 0, 0, 1, 1);

       ts_table(iTable, "set_columns_width_when_export", 100);

       ts_table(iTable, "export_to_dialogcontrol", iListBox_MD, -1, -1);

       x = 10;
       w = 98;
       int delta = 10;
       x = x + w + delta;
       y = 370;
       h = 20;

       x = x + w + delta;
       object("create", "ts_dialogcontrol", iButton_Ok_MD, "iButton_Ok_MD");
       ts_dialogcontrol(iButton_Ok_MD, "init_control", "button", iDialog_MD, x, y, w, h);
       ts_dialogcontrol(iButton_Ok_MD, "eventreaction", "Event_ButtonClicked", "Event_ButtonClicked_MD");
       ts_dialogcontrol(iButton_Ok_MD, "settext", "Ok");
       ts_dialogcontrol(iButton_Ok_MD, "SetAnchorToPanelResize", 1, 1, 0, 0);

       bool bres;
       ts_dialog(iDialog_MD, "invoke", bres);

       //<-
       object("delete", iTable);
       object("delete", iPostgreSQL);
}

int Event_ButtonClicked_MD(int iDescr, string sDescr)
{
       if (sDescr == "iButton_Ok_MD") {
               ts_dialog(iDialog_MD, "SendCloseRequest");
       }
}