منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "القواعد";
الأرشيف الحالي: 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)
Скорее :
بدأ
Button1.Enable:=(Sender as TEdit).Text<>""
الغاية؛
:)





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

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

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



صفحات: 1 فرع كامل

المنتدى: "القواعد";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

الطابق العلوي









الذاكرة: 0.59 ميغابايت
الوقت: 0.05 ج
1-22173
Petyun
2001-12-20 19:33
2002.01.08
تركيب المكونات


1-22077
فن
2001-12-18 17:19
2002.01.08
سؤال إلى pascalshchik ؟؟؟


1-22111
هل قام أحد؟
2001-12-14 08:12
2002.01.08
إنشاء قائمة منسدلة في StringGride ، من النوع بحث في DBGride


4-22490
SergeyDonetsk
2001-11-06 09:22
2002.01.08
كما هو الحال في API ، يمكنك معرفة التعامل مع Canvas واسأل


3-21924
أندرو
2001-12-04 14:37
2002.01.08
DbLookUpComboBox





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch أنجليزي الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский