Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];

Вниз

могут ли быть в SQL пустые значения параметров запроса   Найти похожие ветки 

 
shakh   (2001-12-03 20:29) [0]

Доброго времени суток. Имеется БД (access2000). Имеется интерфейс пользователя (.ехе). Общение интерфейса и БД происходит через ADO и SQL-запросы. Имеется набор форм для заполнения различных таблиц БД. При этом, некоторые Edit"ы на форме могут быть оставлены пустыми, то есть не содержать никаких значений. А теперь вопрос: можно ли через SQL послать запрос на добавление (обновление) таблицы, если НЕКОТОРЫЕ ПОЛЯ данных запроса ПУСТЫЕ (field = "") ??? В основном это касается текстовых полей.
Есть конечно вариант, чтобы проверять значение поля на "пустоту" и формировать запрос динамически, но если таких полей штук 20, то это довольно громоздкая конструкция получается.


 
Котелок   (2001-12-04 07:35) [1]

Можно.

Например:

insert into table(column1,column2) values(:col1,:col2)

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


 
shakh   (2001-12-04 19:31) [2]

добавочка... ну, хорошо. а если один и тот же компонент AdoQuery используется для разных запросов, то и количество параметров может быть разным. а если писать что-то типа AdoQuery1.SQL.Add("insert into table(col1,col2) values "+Edit1.Text+","+Edit2.text+")"); то при пустых значениях в Edit1 или Edit2, вылезает ошибка о недопустимом типе переменной, или что поле не имеет параметра по умолчанию ;(
а таскать за собой кучу статических параметров запроса не очень-то хочется


 
Delirium   (2001-12-04 20:08) [3]

А что, мешает передавать "пустые" значения, если у тебя поля, конечно не not Null ?


 
Котелок   (2001-12-05 00:46) [4]

Если у тебя в едитах должны быть строки, то попробуй вот так...

AdoQuery1.SQL.Add("insert into table(col1,col2) values "+""""+Edit1.Text+""""+","+""""+Edit2.text+""""+")");
С явным указанием, что это строка.
Хотя через parambyname всё равно надёжнее.


 
shakh   (2001-12-05 02:08) [5]

и еще добавочка.
может я плохо объяснил где собака порылась %)
есть запрос AdoQuery1.SQL.Add("insert into table(col1,col2) values ("+""""+Edit1.Text+""""+","+""""+Edit2.text+""""+")");
тут все понятно. но если на форме при вводе данных Edit1 (например) был оставлен пустым, то при выполнении данного запроса косяком лезут "Егоры". так вот, хотелось бы от них (от error"ов) избавиться с минимальными затратами.
писать в запрос нечто типа ...values(:col1,:col2) - это конечно хорошо, но когда полей мало, а если их около 20 штук, то создать все эти параметры в инспекторе объектов и потом, не запутавшись в большой их массе, присвоить им значения из едитов - вот это уже номер с выкрутасами.
можно навтыкать проверок типа
if Edit1.Text<>"" then включить_поле_в_запрос
но это ж изврат полный!


 
Котелок   (2001-12-05 03:33) [6]

Не совсем понятно, зачем создавать в инпекторе объектов?

Насчёт проверки на пустой edit и динамическое включение параметра в запрос то это не такой уж и изврат, а вполне нормальное явление, хотя и нудно это кодировать.

Вот например:

sqlText := "insert into table (";
if edit1.text <> "" then
sqlText := sqlText + "column1,"
if edit2.text <> "" then
sqlText := sqlText + "column2,"
delete(sqlText,length(sqlText),1);
sqlText := sqlText + ") values (";
if edit1.text <> "" then
sqlText := sqlText + ":column1,"
if edit2.text <> "" then
sqlText := sqlText + ":column2,"
delete(sqlText,length(sqlText),1);
sqlText := sqlText + ")";

AdoQuery1.close;
AdoQuery1.SQL.clear;
AdoQuery1.SQL.Add(sqlText);
AdoQuery1.ExecSql;

Ещё могу предложить зайти в Access в конструктор таблицы в которую вставляешь и для всех полей которые могут быть пустыми поставить параметр разрешаюший ввод пустых строк. И тогда проверка на пустые поля должна отпасть и ошибки не должны сыпатся..


 
Ra   (2001-12-05 14:03) [7]

Надо просто не позволять выполнять такой запрос.одним из двух способов
1)перед выполнением проверить..если не все поля заполнены - выдавать сообщение...
2) или вообще disab"лить контрол (скорее всего кнопку) пока не будут введены все необх данные..для этого..на все эдиты на событие OnChange повесить следующий обработчик:


begin
Button1.Enable:=(Edit1.Text<>"") and (Edit2.Text<>"") and ...
end;




 
NDeu   (2001-12-05 14:19) [8]

>Ra © (05.12.01 14:03)
Скорее :
begin
Button1.Enable:=(Sender as TEdit).Text<>""
end;
:)




 
Котелок   (2001-12-06 01:00) [9]

>Ra
Иногда сушествуют такие задачи, когда такой запрос просто необходим.

Я сам сталкивался с такой задачей, правда я использовал обыкновенный статичный запрос с 25 полями и в таблице было разрешение на ввод пустых строк.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
1-22029
neo_
2001-12-18 12:33
2002.01.08
убить TThread


1-22007
creepster
2001-12-17 18:09
2002.01.08
screen saver


7-22419
Пастор
2001-09-21 10:31
2002.01.08
У меня Celeron 800 стоит ли его апгрейтить на Pentium III 800 ?


1-22016
Leviathan
2001-12-13 23:05
2002.01.08
Появление формы


1-22064
daos
2001-12-19 08:46
2002.01.08
реестр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский