Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизГлюк базы dBase если поле пустое Найти похожие ветки
← →
leonidus © (2005-05-12 10:16) [0]Мастера подскажите как победить такую проблему. В процессе применения фильтра (Table.Filtered:=true) в обработчике
procedure TForm1.TTable1FilterRecord(DataSet: TDataSet; var Accept: Boolean); для последующего составления отчета нужно в собрать данные из нужных полей и занести в архив (а потом в отчет). Делаю так:
st:="";
IF (dataset["Econom1"]<>"") and (dataset["Econom1"]<>" ") and (dataset["Econom1"]<>null) and (dataset["Data_prikaz1"]<>"") and (dataset["Data_prikaz1"]<>" ") and (dataset["Data_prikaz1"]<>null) THEN
st:=st+" "+dataset["Econom1"]+"-"+dataset["Data_prikaz1"];
Проблема в том, что если поле пустое, то получаю exception EVariantError "Invalid variant type conversion", если закрыть проверку блоком try - except то чтение всех последующих записей так же читается с ошибкой (но конечно "тихо" т.к. try - except тушит все ошибки) и в результате даже если потом пойдут не пустые поля прочесть их содержимое уже не удается:
try
if (dataset["Econom1"]<>"") and (dataset["Econom1"]<>" ") and (dataset["Econom1"]<>null) and
(dataset["Data_prikaz1"]<>"") and (dataset["Data_prikaz1"]<>" ") and (dataset["Data_prikaz1"]<>null) then
st:=st+" "+dataset["Econom1"]+"-"+dataset["Data_prikaz1"];
except
memo1.Lines.Add("Econom1-Data_prikaz1 - ошибка");
end;
в результате получаю кучу записей "Econom1-Data_prikaz1 - ошибка".
Собственно вопрос в том, как безболезненно узнать пустое поле или нет, что бы даже не заморачиваться с его чтением и идти к следующей записи.
← →
Johnmen © (2005-05-12 10:18) [1]IsNull
← →
evvcom © (2005-05-12 10:21) [2]И по ходу: а еще есть функция trim
← →
msguns © (2005-05-12 10:22) [3]Корректнее обращаться к полям НД через методы TField As...
← →
Anatoly Podgoretsky © (2005-05-12 10:28) [4]Это твой глюк, а не базы. И поострожней с Variant, ты от него еще не раз по зубам получишь.
← →
leonidus © (2005-05-12 11:21) [5]Дело в том, что я работаю именно в обратобчике procedure TForm1.TTable1FilterRecord(DataSet: TDataSet; var Accept: Boolean); т.е. с текущей записью и следовательно для работу й меня есть только dataset["имя поля"] и мне че-то не онятно как тут сделать проверку используя IsNull, Trim тут вроде тоже не в тему, или я чего-то не понимаю?
Обращаться к методам через TField As... это да, но как мне быть в данном конкетном случае?
Т.е. я запускаю фильтрацию базы, проверяю соответствует ли данная запись моим кртериям и если все ок, то читаю данные из ее полей Econom1 Data_prikaz1 и если поля не пустые то помещаю их в массив. Так как же мне тут не напоросься на исключчительную ситуацию?
← →
Anatoly Podgoretsky © (2005-05-12 11:27) [6]TDataset + F1 легко докажетс, что у тебя есть не только это, а много больше.
И весьма интересное использование фильтрации для заполнения массива :-)
← →
msguns © (2005-05-12 11:34) [7]Обращение к полю НД с помощью массива [] лишь один из множества методов, причем едва ли не самый неуклюжий.
Возьми на себя труд и почитай справку по TTable,TADOTable или что там ты используешь, в общем по св-вам и методам TDataSet, который является папанькой большинства "датасетов".
← →
Johnmen © (2005-05-12 11:40) [8]>Т.е. я запускаю фильтрацию базы,
Вот это странная фраза...
В данном случае фильтрация не процесс, а состояние. И если так чуднО использовать OnFilterRecord, то работать, как ожидается, это не будет.
← →
AlexO © (2005-05-12 11:49) [9]IF (TRIM(DataSet.FieldByName("Econom1").AsString)
<> "") and (TRIM(DataSet.FieldByName("Data_prikaz1").AsString) <> "")
THEN st:=st + " " + DataSet.FieldByName("Econom1").AsString + "-" + DataSet.FieldByName("Data_prikaz1").AsString;
← →
leonidus © (2005-05-13 10:14) [10]>AlexO спасибо, теперь понял свою ошибку.
Спасибо всем за подсказки.
← →
evvcom © (2005-05-13 10:19) [11]И все же оптимальнее
str := DataSet.FieldByName("Econom1").AsString;
if (Trim(str)<>"") and ...
then st:=st+" "+str+ ...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c