Как-то давно я купил фотоаппарат на широкую пленку из Катая: SEAGULL 120 (4A-109). Прошло много времени и я решил по фотографировать им. Меня удивило, что в Инете я не нашел инструкции! Пришлось искать свою. Нашел таки. От сканировал ее, перевел при помощи Google. Собрал в файл epub. Кому интересно вот она https://drive.google.com/file/d/1ZxXn3KJ99xEM3FML3_Wj0vwno0GBGLJI/view?usp=sharing.
суббота, 30 декабря 2023 г.
SEAGULL руководство
воскресенье, 23 июля 2023 г.
Читаем SQLITE
Итак, мы читаем SQLITE при помощи
rc = sqlite3_step(select_stmt);
if(SQLITE_ROW == rc) {
// Это означает, что в select_stmt есть для вас данные и вы их можете прочитать
cold = sqlite3_column_count(select_stmt);
for(col=0; col<cold; col++) {
printf("\tColumn %s(%i): '%s'\n",sqlite3_column_name(select_stmt, col), col,
sqlite3_column_text(select_stmt, col));
}
}
// Теперь вы должны еще раз дернуть
rc = sqlite3_step(select_stmt);
и если rc == SQLITE_DONE, то все нормально и вы можете после
sqlite3_reset(select_stmt);
переходить к чтению следующей записи.
КОДЫ
(100) SQLITE_ROW
Код результата SQLITE_ROW, возвращаемый sqlite3_step(), указывает, что доступна другая строка вывода.
(101) SQLITE_DONE
Код результата SQLITE_DONE указывает на завершение операции. Код результата SQLITE_DONE чаще всего рассматривается как возвращаемое значение из sqlite3_step(), указывающее, что оператор SQL выполнен до конца. Но SQLITE_DONE также может быть возвращен другими многошаговыми интерфейсами, такими как sqlite3_backup_step().пятница, 21 июля 2023 г.
Trigger в SQLITE иногда полезен
При использовании SQLITE я заметил, что если я создаю уникальный ключ по полю с датой, то при вставке записей с одинаковой датой, база спокойно вводит неограниченное число записей.
Этот факт я отнес к использованию даты как текст вида "YYYY-MM-DD HH:MM:SS". Для себя я решил эту задачу следующим способом:
Я создал триггер в базе данных скриптом
DROP TRIGGER trg_validate_products_before_insert;
CREATE TRIGGER trg_validate_products_before_insert BEFORE INSERT
ON [statM]
BEGIN
SELECT
CASE
WHEN (SELECT count(*) FROM [statM] WHERE [doc_datec] like NEW.[doc_datec])>0 THEN
RAISE(ABORT, 'Duble Date')
END;
END;
В квадратных скобках моя таблица и поле. При вводе двойной даты срабатывает исключение (ABORT) и ввод не выполняется.
При вводе я готовлю предложение и выполняю его
rc = sqlite3_step(insert_stmt);
if(SQLITE_DONE != rc) {
fprintf(stdout, "insert statement didn't return DONE (%i): %s\n", rc, sqlite3_errmsg(db));
} else {
printf("INSERT completed\n\n");
}
rc = sqlite3_reset(insert_stmt);
Если вы выполняете запись в цикле, не забудьте выполнить reset.
X-Plane 11, 12 - любитель, Фото любитель со стажем