Nach Hause
Top.Mail.Ru Yandeks.Metrika
Forum: "Grundlagen";
Aktuelles Archiv: 2002.01.08;
Herunterladen: [xml.tar.bz2];

Nach unten

ob in SQL leere Abfrageparameterwerte vorhanden sein dürfen Finden Sie ähnliche Zweige


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

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



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

Es ist möglich.

Zum Beispiel:

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 и динамическое включение параметра в запрос то это не такой уж и изврат, а вполне нормальное явление, хотя и нудно это кодировать.

Hier ist ein Beispiel:

sqlText := "insert into table (";
wenn edit1.text <> "" dann
sqlText := sqlText + "column1,"
wenn edit2.text <> "" dann
sqlText := sqlText + "column2,"
delete(sqlText,length(sqlText),1);
sqlText := sqlText + ") values (";
wenn edit1.text <> "" dann
sqlText := sqlText + ":column1,"
wenn edit2.text <> "" dann
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)
Скорее :
beginnen
Button1.Enable:=(Sender as TEdit).Text<>""
end;
:)





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

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

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



Seiten: 1 ganze Branche

Forum: "Grundlagen";
Aktuelles Archiv: 2002.01.08;
Herunterladen: [xml.tar.bz2];

nach oben









Speicher: 0.85 MB
Zeit: 0.037 c
4-22481
Stropal
2001-11-03 10:44
2002.01.08
Drucker direkt arbeiten. Beraten


4-22492
Neverbee
2001-11-06 12:11
2002.01.08
Ein Word-Dokument öffnen. (+)


1-22053
Greenrul
2001-12-18 19:29
2002.01.08
ANTIALSING für TTF-Schriftarten.


1-22213
T2
2001-12-16 07:14
2002.01.08
Geheime Api & oth.


6-22273
Denis Titov
2001-10-06 11:50
2002.01.08
Lokale Netzwerke aufbauen





Afrikanisch Albanien Arabisch Armenisch Aserbaidschanisch Baskisch Weißrusse Bulgarian katalanisch Chinesisch (vereinfacht) Chinesische Tradition) kroatisch Tschechisch Dänisch Dutch Englisch estnisch Philippinisch Finnish Französisch
Galicisch Georgisch Deutsch Griechisch haitian Creole Hebräisch Hindi ungarisch isländisch Indonesian irisch Italian Japanisch Koreanisch lettisch litauisch Makedonisch Malay Maltesisch Norwegian
persisch Polnisch Portugiesisch Rumänisch Russisch serbisch Slovakisch Slowenisch Spanisch Suaheli Swedish Thai Türkisch Ukrainisch Urdu Vietnamesisch Walisisch Jiddisch Bengalisch bosnisch
cebuano Esperanto Gujarati Hausa Hmong igbo Javanisch kannada khmer Laotisch Lateinisch Maorisch Marathi Mongolisch nepali Pandschabi Somalisch Tamilisch Telugu Yoruba
Zulu
Английский Französisch Deutsch Italienisch Португальский Russisch Spanisch