LINUX.ORG.RU

Сообщения zanzarah

 

PQexecParams() возвращает ERROR: invalid input syntax for type date: «»

Доброго времени суток! Подскажите, пожалуйста,как в качестве параметра передавать NULL если в переменной пустая строка? У меня такой код:

    string new_data = "some new data";
    string fr_dt = obj.getDate();

    const char *c_new_data = new_data.c_str();
    const char *c_fr_dt = fr_dt.c_str();
  
    const char* ins_data_com = "select * from ins_data($1,$2);
    int nParams = 2;
    const char *const paramValues[] = {c_new_data,c_fr_dt};
    const int paramLengths[] = {sizeof(c_new_data),sizeof(c_fr_dt)};
    const int paramFormats[] = {0,0};
    int resultFormat = 0;
    
    PGresult res_com = PQexecParams(conn,ins_data_com, 
                       nParams, NULL, paramValues, paramLengths, paramFormats, resultFormat);

и код в pgsql:

CREATE OR REPLACE FUNCTION ins_data(in_data text, in_date date)
        RETURNS int
        LANGUAGE plpgsql
        AS $function$
        DECLARE n_id int;
    BEGIN
        WITH cte AS (
        INSERT INTO public.my_table
        (new_data, time_in)
        VALUES(in_data, coalesce(in_date::timestamp,current_timestamp))
        RETURNING id AS new_id
        )
        SELECT new_id INTO n_id FROM cte;
        RETURN n_id;
    END;
        $function$
        ;

Если добавляю проверку на пустую строку:

if (fr_dt.empty()) {
    fr_dt = "NULL";
}
То в возвращаемой ошибке получаю: ERROR: invalid input syntax for type date: «NULL»

 ,

zanzarah
()

не открывается второе окно при запуске из GUI

Доброго времени суток, господа присяжные завсегдатаи.

Я даже не знаю как правильно назвать тему.

В общем, какие дела. Есть небольшая программка, которая подключается к БД и работает как либо с ней.

При запуске создаем окно авторизации. Простенькое, логин, пароль, войти, далее, далее, готово.

Если авторизация пройдена, то окно уничтожается:

  if ((PQping(connInfo))==0) {
      PQconnectdb(connInfo);
        if(PQstatus(PQconnectdb(connInfo))==0){
          //Закрытие окна логина, открытие основного окна
          gtk_widget_destroy(window);
          mainFormShow(app);
        } else {
      std::cout << PQerrorMessage(PQconnectdb(connInfo)) << '\n';
    }
    } else {
      std::cout << "error:\n" << PQerrorMessage(PQconnectdb(connInfo)) << '\n';
    }
и создается новое.

А теперь проблема. Если запустить приложение из GUI, ткнув по иконке в папке, то после ввода логина и пароля не происходит ничего. А если запустить из консоли - то все работает прекрасно.

Что делать? Куда копать? Куда смотреть?

Заранее прошу прощения, если что-то подобное когда-то где-то обсуждалось. Но консоль мне не ругается и я не понимаю, что делать. Заранее спасибо.

 , ,

zanzarah
()

Gtk+ стилизация виджета

Здрасьте! Дамы и господа, леди и джентельмены, учу С и GTK+, хочу сделать валидацию, которая будет окрашивать границу виджета в красный (или фон). Есть код:

GtkWidget* myEntry = gtk_entry_new();
g_signal_connect(myEntry,"key-release-event",G_CALLBACK(check),NULL);
в check пробовал:
GtkStyleContext *myStyle = gtk_widget_get_style_context(GTK_WIDGET(entryDate));
GdkRGBA fuck = { 1.0, 0.0, 0.0, 0.0 };
g_object_set(GTK_WIDGET(entryDate), GTK_STYLE_PROPERTY_BACKGROUND_COLOR, fuck);
и пробовал:
GtkStyleContext *myStyle = gtk_widget_get_style_context(entryDate);
GtkCssProvider *myCss = gtk_css_provider_new();

gtk_css_provider_load_from_path(myCss,"entryDate.css", NULL);
gtk_style_context_add_provider(myStyle,GTK_STYLE_PROVIDER(myCss), GTK_STYLE_PROVIDER_PRIORITY_USER);
entryDate.css:
.entry {
  background: #669999;
  border-width: 3px;
  border-color: red;
}

но эти приемы, как я понимаю, требуют отрисовывать виджет вновь. А как сделать (и возможно ли вообще в GTK) изменить стиль виджета «на лету»?

 ,

zanzarah
()

RSS подписка на новые темы