Форум: "Начинающим";
Текущий архив: 2009.09.20;
Скачать: [xml.tar.bz2];
ВнизПоле типа DATE при экспорте в ДБФ Найти похожие ветки
← →
Tneduts © (2009-07-10 13:14) [0]У меня gdb-шная база, работаю я в Делфи7, линкуюсь к базе при помощи стандартного DATASource + FIBPlus компроненты (pFIBDatabase, pFIBDataSet, pFIBTransaction).
После прочтения параметров с инишника конектимся
Begin
With TKDatabase Do
Begin
DatabaseName := DB_Path;
ConnectParams.UserName := DB_User;
ConnectParams.Password := DB_Password;
ConnectParams.CharSet := DB_CharSet;
SQLDialect := DB_SQLDialect;
Connected := true;
End;
TKTransaction.StartTransaction;
End
Except
On E: Exception Do ShowMessage("Program stopped. Error: " + E.Message);
End;
Теперь собственно выборка
With TKDataSet Do
Begin
If Active Then
Close;
SelectText := "SELECT EL.NAME , EP.PTIME, EP.DIRECTION FROM EMPPUNCHES EP, EMPLIST EL WHERE ( (EL.DELETED = 0) AND ( EP.PTIME BETWEEN "" + d1 + "" AND "" + d2 + "") )";
SQLs.SelectSQL.Text := SelectText;
Open;
End;
EP.PTIME - вот это поле хранит в себе дату и время. Как мне организовать ещё одно, может временное, поле для того что бы выдёргивать отдельно время?
Примечания:
Я работаю над так сказать утилиткой для готового приложения, но моё приложение с ним ни как не связанно. Просто то не умеет выгружать в ДБФ
Базу править можно, но не желательно.
← →
Anatoly Podgoretsky © (2009-07-10 13:19) [1]DBF это что?
← →
makz (2009-07-10 14:58) [2]SELECT cast(extract(HOUR from EP.PTIME)||":"||extract(MINUTE from EP.PTIME) as time) FROM EP
← →
Tneduts © (2009-07-10 15:33) [3]
> SELECT cast(extract(HOUR from EP.PTIME)||":"||extract(MINUTE
> from EP.PTIME) as time) FROM EP
Выдает ошибку
Не могли бы подробнее описать.
← →
Loginov Dmitry © (2009-07-10 23:29) [4]
> Я работаю над так сказать утилиткой для готового приложения,
> но моё приложение с ним ни как не связанно. Просто то не
> умеет выгружать в ДБФ
> Базу править можно, но не желательно.
Каким образом осуществляется выгрузка в ДБФ?
Какая технология или компоненты для этого используются?
Зачем потребовалось отделять время от даты?
← →
makz (2009-07-11 04:56) [5]В ib5 наверное extract нет, но необязательно же с SQL поле создавать, можно и calculated сделать в датасете, или вообще прямо при загрузке в дбф отрезать дату.
← →
Германн © (2009-07-12 01:04) [6]
> DBF это что?
← →
Виталий Панасенко(дом) (2009-07-12 20:14) [7]а вот это
> DatabaseName := DB_Path;
> ConnectParams.UserName := DB_User;
> ConnectParams.Password := DB_Password;
> ConnectParams.CharSet := DB_CharSet;
> SQLDialect := DB_SQLDialect;
> Connected := true;
> End;
> TKTransaction.StartTransaction;
> End
> Except
> On E: Exception Do ShowMessage("Program stopped. Error:
> " + E.Message);
> End;
>
бред сивой кобылы... транзакции стартовать нет смысла..она автоматом стартует.. ты ж указывал у FIBDataBase св-ва ReadTransaction и UpdateTransaction.. иначе работать не будет. и по теме: у ИБ 5,х нету разделения типа на дату/время, все хранится в одном поле. потому видимо действительно проще на клиенте с вычисляемыми полями поиграться
← →
Tneduts © (2009-07-14 10:39) [8]
> Каким образом осуществляется выгрузка в ДБФ?
> Какая технология или компоненты для этого используются?
Для выгрузки в ДБФ я использую компоненты EMS QuickExport Component Suite 3.0
(C) EMS Corporation
> Зачем потребовалось отделять время от даты?
Так поставлена задача.
← →
Tneduts © (2009-07-14 10:40) [9]
> makz (11.07.09 04:56) [5]
>
> В ib5 наверное extract нет, но необязательно же с SQL поле
> создавать, можно и calculated сделать в датасете, или вообще
> прямо при загрузке в дбф отрезать дату.
Если вас не затруднит, приведите пример.
← →
Tneduts © (2009-07-14 10:44) [10]
> у ИБ 5,х нету разделения типа на дату/время, все хранится
> в одном поле. потому видимо действительно проще на клиенте
> с вычисляемыми полями поиграться
Не могли бы вы внести некую конкретику.
← →
Anatoly Podgoretsky © (2009-07-14 10:50) [11]
> Германн © (12.07.09 01:04) [6]
> > DBF это что?
Молчит зараза.
← →
Tneduts © (2009-07-14 11:39) [12]
> > Германн © (12.07.09 01:04) [6]
> > > DBF это что?
>
> Молчит зараза.
http://ru.wikipedia.org/wiki/DBF
← →
Anatoly Podgoretsky © (2009-07-14 11:44) [13]И зачем это.
На мой взгляд тебе ответ просто не требуется, ты пришел сюда потрепаться.
← →
sdsk © (2009-07-14 12:17) [14]Зачем на уровне полей выборки отделять дату от времени? Сомневаюсь я, что в ТЗ такое требование. Там требование скорее всего по организации интерфейса, 2 контрола на дату и время, а не требование к выборке данных.
> EP.PTIME - вот это поле хранит в себе дату и время. Как
> мне организовать ещё одно, может временное, поле для того
> что бы выдёргивать отдельно время?
Дата и время это просто число. Отбрасывай целую часть, вот тебе и время отдельно от количества суток с начала исчисления.
← →
Anatoly Podgoretsky © (2009-07-14 12:34) [15]> sdsk (14.07.2009 12:17:14) [14]
Но остается неизвестным, что такое DBF - в большинстве из них нет поля типа TIME и нет времени в составе DATE
Разговор бессмысленен без ответа.
← →
sniknik © (2009-07-14 12:41) [16]> http://ru.wikipedia.org/wiki/DBF
статью ламер писал...
с начала "DBF — формат хранения данных", это не формат, нет такого формата есть расширение файлов которые могут быть в каком то формате.
не различает формат файла и расширение файла.
потом он правда упоминает о возможных различиях в форматах, и о поддерживающих его различных "движках" (dBase III, IV,Clipper, FoxBASE/FoxPro) но явно недостаточно. и как то вскользь, так что создается впечатление типа это одно и тоже с небольшими отличиями. и выбрал как раз такие, с небольшими, хотя и их бывает достаточно для координальной несовместимости между собой. не говоря о других которые несовместимы в принципе, хотя и имеют тоже самое расширение. (ну к примеру из того с чем сталкивался - адвантаже датабейсе в "родном" формате (вроде у нее есть и режим поддержки dBase), первасвиль (одно из расширений по умолчанию было dbf, хотя там вообще то можно поставить любое ), ну и небезызвестный оракл... тоже делает(-ал) файлы базы с таким расширением.)
и это далеко не все... когда то занимался этим, выбрал где то 30 различных движков из ~ 200 найденных (тоже не все), для тестов чтобы отобрать окончательный для работы в паре с клипером, подошло 2, выбрал 1 тот что был с иходниками хотя более тормозной и платный, и не пожалел, оказалось что даже смена версии клипера (которую сделали естественно после того как все уже было готово) внесла в формат изменения не совместимые с пред идущей... пришлось править в исходниках. (не так стало обрабатываться выражение используемое в индексе, что повлияло на структуру индекса, было бы приложение одно, нет проблем, реиндекс и все дела, но когда в паре...)
ну так вот... теперь вернемся к началу
> DBF это что?
вернее надо чуть по другому
DBF это что, у тебя? (/для тебя?)
← →
Anatoly Podgoretsky © (2009-07-14 13:06) [17]> sniknik (14.07.2009 12:41:16) [16]
Клиппер особая песня, там даже строковые поля не совпадают с xBase
← →
Anatoly Podgoretsky © (2009-07-14 13:08) [18]> sniknik (14.07.2009 12:41:16) [16]
Я уже частично написал про время, мне известен только один форма, который поддерживает TIME и DATETIME - это dBase VII и выше, но его поддержка по сути ограничена BDE
← →
Виталий Панасенко(дом) (2009-07-14 13:09) [19]
> Tneduts © (14.07.09 10:44) [10]
>
>
> > у ИБ 5,х нету разделения типа на дату/время, все хранится
> > в одном поле. потому видимо действительно проще на клиенте
> > с вычисляемыми полями поиграться
>
> Не могли бы вы внести некую конкретику.
>
а куда конкретней? объяснить, что такое вычисляемое поле и как его заполнять/вычислять?8-0
← →
Loginov Dmitry © (2009-07-14 22:14) [20]
> или вообще
> > прямо при загрузке в дбф отрезать дату.
>
> Если вас не затруднит, приведите пример.
Если предположить, что выбранный формат DBF не предусматривает поля TIME и TIMESTAMP, значит для хранения времени нужно либо числовое, либо строковое поле. Для наглядности поле - строковое, тогда пример может выглядеть следующим образом:
DBF.FieldByName("TIME").AsString := FormatDateTime("hh-nn-ss", TKDataSet.FieldByName("PTIME").AsDateTime);
Надеюсь, не требуется дополнять, что для добавления записи нужно использовать дополнительные методы TDateSet, такие как Open, Eof, Next, Append, Post, Close и т.д.
← →
Кщд (2009-07-15 06:03) [21]>sdsk © (14.07.09 12:17) [14]
>Зачем на уровне полей выборки отделять дату от времени?
например, затем, что есть такое понятие - OLAP
а в таких системах, порою, дата, часы и минуты - это три поля
хотел написать и секунды, но честно - с таким не встречался)
← →
Tneduts © (2009-07-15 11:36) [22]
> sdsk © (14.07.09 12:17) [14]
>
> Зачем на уровне полей выборки отделять дату от времени?
> Сомневаюсь я, что в ТЗ такое требование. Там требование
> скорее всего по организации интерфейса, 2 контрола на дату
> и время, а не требование к выборке данных.
>
>
> > EP.PTIME - вот это поле хранит в себе дату и время. Как
> > мне организовать ещё одно, может временное, поле для того
> > что бы выдёргивать отдельно время?
>
>
> Дата и время это просто число. Отбрасывай целую часть, вот
> тебе и время отдельно от количества суток с начала исчислени
То что это число я понимаю, как с его обрабатывать, где начало исчисления - не понятно. Просветите или подскажите где почитать.
← →
Tneduts © (2009-07-15 11:38) [23]
> Виталий Панасенко(дом) (14.07.09 13:09) [19]
>
>
> > Tneduts © (14.07.09 10:44) [10]
> >
> >
> > > у ИБ 5,х нету разделения типа на дату/время, все хранится
> > > в одном поле. потому видимо действительно проще на клиенте
> > > с вычисляемыми полями поиграться
> >
> > Не могли бы вы внести некую конкретику.
> >
>
> а куда конкретней? объяснить, что такое вычисляемое поле
> и как его заполнять/вычислять?8-0
Да, если вас не затруднит или скажите где почитать.
← →
Tneduts © (2009-07-15 11:41) [24]
> Loginov Dmitry © (14.07.09 22:14) [20]
> Если предположить, что выбранный формат DBF не предусматривает
> поля TIME и TIMESTAMP, значит для хранения времени нужно
> либо числовое, либо строковое поле. Для наглядности поле
> - строковое, тогда пример может выглядеть следующим образом:
>
> DBF.FieldByName("TIME").AsString := FormatDateTime("hh-nn-
> ss", TKDataSet.FieldByName("PTIME").AsDateTime);
> Надеюсь, не требуется дополнять, что для добавления записи
> нужно использовать дополнительные методы TDateSet, такие
> как Open, Eof, Next, Append, Post, Close и т.д.
Требуется.(простите мне моё невежество) + я работаю не с TDateSet, а с FIBDataSet и если можно придерживаться именно его.
← →
Виталий Панасенко(дом) (2009-07-15 12:26) [25]
> Tneduts © (15.07.09 11:38) [23]
OnCalcFields+F1, поищи в помощи Calculated Field
> Tneduts © (15.07.09 11:41) [24]
А по барабану, ФИБы - наследники TDataSet.
брось это дело, раз не знаешь основы...
← →
Tneduts © (2009-07-15 13:12) [26]
> Виталий Панасенко(дом) (15.07.09 12:26) [25]
>
>
> > Tneduts © (15.07.09 11:38) [23]
>
> OnCalcFields+F1, поищи в помощи Calculated Field
>
> > Tneduts © (15.07.09 11:41) [24]
>
> А по барабану, ФИБы - наследники TDataSet.
>
> брось это дело, раз не знаешь основы...
Некое проявление слабости. Да у меня далеко не богатый опыт, но я здесь и общаюсь, что бы это исправить. Вам, как и всем остальным, принимающих участие в данном обсуждении, ОГРОМНОЕ СПАСИБО.
Но есть задача и её нужно решить. Наберитесь терпения, а обещаю быть прилежным учеником)))
← →
Виталий Панасенко(дом) (2009-07-15 13:35) [27]тут решают конкретные проблемы, а в вашем посте ее вообще нету. есть отсутствие элементарных знаний.. ИМХО
← →
Tneduts © (2009-07-15 13:48) [28]
> Loginov Dmitry © (14.07.09 22:14) [20]
> DBF.FieldByName("TIME").AsString := FormatDateTime("hh-nn-ss",TKDataSet.FieldByName("PTIME").AsDateTime);
Для выгрузки в ДБФ я использую компоненты EMS QuickExport Component Suite 3.0
(C) EMS Corporation
Очень удобные компоненты, но я не нашел подобных настроек. Если есть опыт работы с именно с этими компонентами - поделитесь)
← →
Tneduts © (2009-07-15 13:55) [29]
> Виталий Панасенко(дом) (15.07.09 13:35) [27]
>
> тут решают конкретные проблемы, а в вашем посте ее вообще
> нету. есть отсутствие элементарных знаний.. ИМХО
>
У меня конкретная проблема. Выше её описание, если я описываю не корректно, то поправьте я изложу более детально. Да я не волшебник, я только учусь.
Более того "СУХА ТЕОРИЯ МОЙ ДРУГ, НО ДРЕВО ЖИЗНИ ЗЕЛЕНЕЕТ".
По этому если вам не сложно терпеть мою темноту, то пожалуйста в примерах. Если нет - то давайте опустим обсуждение уровня моих знаний, т.к. я достаточно самокритичен.
← →
Anatoly Podgoretsky © (2009-07-15 14:42) [30]
> но я здесь и общаюсь, что бы это исправить
Общение у тебя какое то странное, партизанское. Информацию даже под пытками не вытянуть.
> По этому если вам не сложно терпеть мою темноту, то пожалуйста
> в примерах.
Нельзя в примерах - недостаток информации.
← →
Anatoly Podgoretsky © (2009-07-15 14:44) [31]> Tneduts (15.07.2009 13:48:28) [28]
Как ты выгрузить DateTime если у тебя по всей видимости в DBF нет поддержки таких полей в принципе.
Для начала огласи, что такое DBF
← →
Виталий Панасенко(дом) (2009-07-15 15:26) [32]Это плата за
> Tneduts © (15.07.09 13:48) [28]
>
>
> > Loginov Dmitry © (14.07.09 22:14) [20]
>
>
> > DBF.FieldByName("TIME").AsString := FormatDateTime("hh-
> nn-ss",TKDataSet.FieldByName("PTIME").AsDateTime);
>
> Для выгрузки в ДБФ я использую компоненты EMS QuickExport
> Component Suite 3.0
> (C) EMS Corporation
> Очень удобные компоненты, но я не нашел подобных настроек.
> Если есть опыт работы с именно с этими компонентами - поделитесь)
Сделал бы руками, все было бы проще. Только в примере опечатка:
DBF.FieldByName("TIME").AsString := FormatDateTime("hh-mm-ss",TKDataSet.FieldByName("PTIME").AsDateTime);
← →
Tneduts © (2009-07-15 15:31) [33]
> Anatoly Podgoretsky © (15.07.09 14:44) [31]
> Как ты выгрузить DateTime если у тебя по всей видимости
> в DBF нет поддержки таких полей в принципе.
В том и дело, что нет. Я об этом сказал изначально
> EP.PTIME - вот это поле хранит в себе дату и время. Как
> мне организовать ещё одно, может временное, поле для того
> что бы выдёргивать отдельно время?
Может не совсем корректно это прозвучало и все же.
> Для начала огласи, что такое DBF
это всё то о чём сказал sniknik © (14.07.09 12:41) [16]
← →
Tneduts © (2009-07-15 15:38) [34]
> Виталий Панасенко(дом) (15.07.09 15:26) [32]
>
> Это плата за
> Очень удобные компоненты
))) Это я уже прочувствовал.
Виталий, скажите пожалуйста, а если допустим пусть отрабатывает компонента по выгрузке, потом открывать ДБФник и дописывать ещё одно поле?
Р.С. Как работать с ДБФ в ручную опишите, как для чайника ^^)
← →
Виталий Панасенко(дом) (2009-07-15 15:42) [35]
> Р.С. Как работать с ДБФ в ручную опишите, как для чайника
> ^^)
точно также, как с pFIBDataSet: Append/Edit/post и т.д. только для доступа БДЕ/АДО или еще чего, типа Halcyon/TDbf/Apollo(и фиг его знает, что еще)
← →
Anatoly Podgoretsky © (2009-07-15 15:42) [36]Это слишком много и не отвечает на вопрос.
В большинстве DBF форматов единственная возможность это писать в строку или в целое, для xBase как правило целых нет, нужно писать в число (number N5.0) для точности в секунду.
← →
Tneduts © (2009-07-15 15:59) [37]
> Anatoly Podgoretsky © (15.07.09 15:42) [36]
>
> Это слишком много и не отвечает на вопрос.
> В большинстве DBF форматов единственная возможность это
> писать в строку или в целое, для xBase как правило целых
> нет, нужно писать в число (number N5.0) для точности в секунду.
>
>
Типы данных полей
N Числовое
C Символьное
D Дата
M Memory
А если в символьном?
← →
Tneduts © (2009-07-15 16:06) [38]> Anatoly Podgoretsky © (15.07.09 15:42) [36]
Строка меня бы вполне устроила
← →
Anatoly Podgoretsky © (2009-07-15 16:18) [39]> Tneduts (15.07.2009 15:59:37) [37]
Ну я же и не только я, написал, что или в символьное или в числовое, в зависимости от того, что дальше с этими данными будут делать.
← →
Tneduts © (2009-07-15 16:26) [40]
> Anatoly Podgoretsky © (15.07.09 16:18) [39]
> Виталий Панасенко(дом) (15.07.09 15:42) [35]
Уважаемые, а можно "ОЧЕНЬ" детально(а лучше в примерах), как открыть готовый ДБФ, создать поле TIME а потом уже
> DBF.FieldByName("TIME").AsString := FormatDateTime("hh-mm-
> ss",TKDataSet.FieldByName("PTIME").AsDateTime);
← →
Anatoly Podgoretsky © (2009-07-15 16:54) [41]Для чего такие сложности, когда это делается за один присест при экспорте.
Ведь иначе придется выполнять два отчета, делать реструктиризацию, риск в получение неконсистентных данных и большие потери времени. И что смешнее всего точно также придется выделять дату и время.
← →
Tneduts © (2009-07-15 17:04) [42]
> Anatoly Podgoretsky © (15.07.09 16:54) [41]
Пусть так. Тогда покажите, пожалуйста, как с нуля, "в ручную" выгрузить в ДБФ.
Хотя бы не большой примерчик(сейчас рыскаю по инету в поисках подобного)
← →
Tneduts © (2009-07-15 18:23) [43]
Var
Exp1: TTable;
begin
Exp1.TableName := "ПУть\Export.dbf";
Exp1.TableType := ttDBase;
Exp1.Open;
Exp1.FieldDefs.Add("TIME",ftString, 20, false);
Exp1.FieldByName("TIME").AsString := FormatDateTime("hh-mm-ss",TKDataSet.FieldByName("PTIME").AsDateTime);
Exp1.Close;
Выдаёт
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EAccessViolation with message "Access violation at address 00642B5A in module "Project1.exe". Read of address 0000001C". Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Что я сделал не так?
← →
sniknik © (2009-07-15 18:38) [44]> Что я сделал не так?
не посмотрел в справку и не прочел ни единой обучающей книги...
p.s. серьезно думаешь, что кто то возьмется за твое обучение с 0? притом судя по всему вопреки твоему желанию не учится.
← →
Tneduts © (2009-07-15 18:43) [45]
> sniknik © (15.07.09 18:38) [44]
Я не прошу меня обучать, я прошу показать, как это делается.
← →
sniknik © (2009-07-15 19:08) [46]> Я не прошу меня обучать
того кто написал [43] и не понял [20] необходимо обучать... хотя бы "подтянуть" его до уровня чтобы он не писал глупости и начал понимать ответы.
← →
Tneduts © (2009-07-15 19:16) [47]
> sniknik © (15.07.09 19:08) [46]
>
> > Я не прошу меня обучать
> того кто написал [43] и не понял [20] необходимо обучать.
> .. хотя бы "подтянуть" его до уровня чтобы он не писал глупости
> и начал понимать ответы.
>
Так в чём проблема?
"Подтяните"!
Тем более, что я не прошу чего то сверх естественного, с вашим опытом ответить на мои глупости не составляет проблемы!!!!
← →
sniknik © (2009-07-15 19:45) [48]> Так в чём проблема?
> "Подтяните"!
забыл?
> p.s. серьезно думаешь, что кто то возьмется за твое обучение с 0? притом судя по всему вопреки твоему желанию не учится.
> с вашим опытом ответить на мои глупости не составляет проблемы!!!!
как раз таки наоборот, отвечать на глупости никакой опыт не поможет. ответить можно только тому кто спрашивает и реагирует разумно.
у тебя же с этим делом с первого уточнения (Anatoly Podgoretsky © (10.07.09 13:19) [1]) не заладилось.
← →
Виталий Панасенко(дом) (2009-07-15 21:37) [49]
> Tneduts © (15.07.09 19:16) [47]
>
>
> > sniknik © (15.07.09 19:08) [46]
> >
> > > Я не прошу меня обучать
> > того кто написал [43] и не понял [20] необходимо обучать.
>
> > .. хотя бы "подтянуть" его до уровня чтобы он не писал
> глупости
> > и начал понимать ответы.
> >
>
> Так в чём проблема?
> "Подтяните"!
> Тем более, что я не прошу чего то сверх естественного, с
> вашим опытом ответить на мои глупости не составляет проблемы!
> !!!
Так если ларчик просто открывается: открываешь, а он пуст.. при чем, абсолютно пуст...положи туда чего-нибудь. благо литературы сейчас - пруд-пруди, это не конец 80-х, начало 90-х. и в электронном виде валом, даже покупать не нужно
← →
Loginov Dmitry © (2009-07-15 22:45) [50]> Сделал бы руками, все было бы проще. Только в примере опечатка:
>
> DBF.FieldByName("TIME").AsString := FormatDateTime("hh-mm-
> ss",TKDataSet.FieldByName("PTIME").AsDateTime);
Месяц вместо минуты? Может автору это и нужно, как знать :))
← →
Виталий Панасенко(дом) (2009-07-16 12:02) [51]
> Loginov Dmitry © (15.07.09 22:45) [50]
сорри, сам не туды глянул..я про дату подумал...и про время одновременно...быват..:-)
← →
Tneduts © (2009-07-16 17:57) [52]
> sniknik © (15.07.09 19:45) [48]
> Виталий Панасенко(дом) (15.07.09 21:37) [49]
Достаточно пустых нравоучений!
----------------------------------------------------------------------------------
Проблема решена.
Всем принявшим конструктивное участие ОГРОМНОЕ СПАСИБО!
Отдельная благодарность Loginov Dmitry ©.
Тема закрыта.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.09.20;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.006 c