Предупредить пользователя, если неправильное значение отсутствует в таблице (Mysql + C) - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть таблица:

For_Sconti  |    Cat_Sconti    |  Sconto 

  7148               A1          451.00

Как можно запретить пользователю вводить неверное (не в таблице) значение For_Sconti при попытке обновить поле Sconto?

InКороче говоря, через интерфейс C я хотел бы обновить вышеупомянутую таблицу.

do {
    printf("Insert For_Sconti: \n");
    scanf("%s", For_Sconti);
    }
    while (strlen(For_Sconti)>5);

Здесь я хотел бы предупредить пользователя всякий раз, когда он / она вставляет значение For_Sconti, которого нет в таблице.

Я думал об этом:

strcat(query, "SELECT For_Sconti,Cat_Sconti FROM Sconti;");
result = mysql_store_result (conn);
mysql_field_seek (result, 0);         
row = mysql_fetch_row (result);     

Но я верю, это просто чепуха.

Может кто-нибудь мне помочь?

Ответы [ 3 ]

0 голосов
/ 19 сентября 2011

Вот шаги, которые вы должны выполнить: 1.- Получить значение For_Sconti. 2.- Напишите запрос как: sprintf (outString "SELECT% s FROM myTable", readValue);

3.- И затем проверьте результат, чтобы увидеть, содержит ли он что-то, если он содержит что-то, затем разрешите пользователю вставить новое значение, иначе предупредите пользователя об ошибке.

0 голосов
/ 19 сентября 2011

Первичные ключи предотвращают дублирование; внешние ключи ограничивают диапазон допустимых значений.

Предполагая, что у вас есть ограничение внешнего ключа, вы, вероятно, просто хотите попытаться вставить предоставленные пользователем данные и перехватить ошибку, которую возвращает библиотека интерфейса C, когда вы нарушаете ограничение внешнего ключа. Этот метод требует только одного обращения к базе данных.

Если вы хотите узнать, существует ли введенное пользователем значение в базе данных, выполните запрос, подобный этому, и проверьте его возвращаемое значение.

SELECT (COUNT(*) > 0) as For_sconti_exists
FROM Sconti
WHERE For_sconti = <the user-supplied value>

Этот метод требует двух циклических проверок для допустимых значений - один для определения, существует ли значение, и один для вставки строки. Вы также должны

  • обратите внимание на уровни изоляции транзакций,
  • выполнить оба оператора в пределах одной транзакции (или кто-то может удалить строки, которые, по вашему мнению, имеют допустимые значения, между временем, которое вы ВЫБИРАЕТЕ, и временем, которое вы ВСТАВЛЯЕТЕ), и
  • ошибки ловушки в любом случае.
0 голосов
/ 19 сентября 2011

Попробуйте использовать функцию mysql_affered_rows () . Если результат равен 0, то пользователь попытался изменить несуществующий For_Sconti.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...