Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    CYMar



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую, Комрады!
    Ищу помощи/констультации в одном деликатном вопросе. Если ошибся топиком - не пинайте.
    Есть программа, собирающая данные с удаленных устройств Bluetooth.  
    ExeInfo PE сказал - Borland Delphi ( 2.0 - 7.0 ) 1992 - www.borland.com.
    К машине, на которой установлена данная программа есть промышленный Serial Bluetooth Adapter. Перед началом сбора данных программа спрашивает у данного адаптера версию прошивки AT командой (ATI?), на что получая ответ (F/W version: v4.15), сравнивает его с совместимыми, и начинает процедуру сбора данных.
    Купили еще один такой адаптер, а у него версия прошивки немного отлична от того, который у нас был (4.35), соотвественно процедуру проверки прошивки он не проходит.
    Открыл исполняемый файл блокнотом, нашел данный кусок

    Код:
    ATI?    яяяя   F/W VERSION: SPP_03 яяяя   F/W VERSION: v4.15  яяяя   F/W VERSION: v4.19  яяяя*    

    Очевидно, это тот самый список поддерживаемых прошивок.
    Попробовал WinHEX изменить 4.15 на 4.35, он его увидел, установил связь, слил данные, но завершать сеанс связи не хочет, думаю нарушилась какая то последовательность из-за такого грубого вмешательства.
    Подскажите где можно аккуратно изменить данный параметр не испортив тем самым алгоритм работы программы, чтобы можно было работать и с новыми версиями прошивок данного адаптера.
    Спасибо.

    Всего записей: 81 | Зарегистр. 29-07-2006 | Отправлено: 15:32 11-09-2010 | Исправлено: CYMar, 15:38 11-09-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CYMar
    Мне кажется, что с новой версией прошивки просто нужно работать по другому алгоритму. И очень может быть, что легче будет написать замену вашей проги, чем ее исправить.
    Ну или возможно вам удастся перепрошить адаптер?
     
    svs123456789
    Либо в править ресурсах соответствующую форму (ее еще нужно там найти), либо изменить сразу для всей системы значение DPI, тогда и в инспекторе шрифт станет больше.
     
    DmitryKz
    А при вызове SystemParametersInfo эффекта нету?

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:46 11-09-2010 | Исправлено: Frodo_Torbins, 23:51 11-09-2010
    CYMar



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Мне кажется, что с новой версией прошивки просто нужно работать по другому алгоритму. И очень может быть, что легче будет написать замену вашей проги, чем ее исправить.  
    Ну или возможно вам удастся перепрошить адаптер?

    В новой прошивке было добавлено несколько функций, которые мы не используем.
    Написать новую версию не вариант, к сожалению, связи с разработчиком нет, исходников нет, а комплекс довольно сложный и завязан на разные службы.
    А перешить адаптер - практически невозможно. Но вот сделать некий патч для данной программы, который бы устранил данную проблему, как мне кажется, вполне реально.
    Если интересно могу скинуть исполняемый файл.

    Всего записей: 81 | Зарегистр. 29-07-2006 | Отправлено: 00:42 12-09-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CYMar
    Я к сожалению не очень разбираюсь в реверс инжиниринге. К тому же не имея девайса, с которым эта прога должна взаимодействовать, затея становится практически гиблой. Но файлик все же можете куда-нибудь выложить - вдруг найдется умелец. Плюс на форуме есть раздел с объявлениями о работе: http://forum.ru-board.com/topic.cgi?forum=33&topic=2395

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 14:50 12-09-2010
    CYMar



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Я к сожалению не очень разбираюсь в реверс инжиниринге. К тому же не имея девайса, с которым эта прога должна взаимодействовать, затея становится практически гиблой. Но файлик все же можете куда-нибудь выложить - вдруг найдется умелец.

    Ссылка на исполняемый файл. Кажется мне для специалиста это дело 5ти минут, а я, к сожалению, делитант.

    Проблема решена. Спасибо.

    Всего записей: 81 | Зарегистр. 29-07-2006 | Отправлено: 15:31 12-09-2010 | Исправлено: CYMar, 23:20 15-09-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток. Перевожу программу для открытия\редактирования xml файлов (использую xmlMapper + компоненты XMLTransform и XMLTransformProvider) с Delphi 2006 (DevExpress, старые) на Delphi 2009 (DevExpress v48). Поменял функции с DecompressBuf на zDecompress. Ругалось в uses на ToolEdit и CurrEdit, убрал, вроде бы это для Rx компонентов, их не использую. Все компилируется, но при выполнении программы возникает три ошибки:
    1. Русский текст отображается как иероглифы в cxGrid. Я так понимаю это из-за юникодной 2009. В 2006 ставил XML.Encoding := 'Windows-1251';
    2. При сохранении одного из видов xml файла, при выполнении программы, возникает ошибка (если запускать exe все вроде бы нормально): Project pReportEdit.exe raised exception class EDatabaseError with message 'Record not found or changed by another user'.
    3. При запуске у пользователя требует библиотеку midas.dll. Когда писал программу на 2006 было тоже самое, тогда в корневой каталог программы закинул со своего компа эту dll. Сейчас не могу найти для 2009.  
    Помогите пожалуйста решить вопросы. Заранее благодарен.  
     
    Вот код:
    Подробнее...

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 17:47 15-09-2010
    salexn1



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    п.1 ---  
    п.2 если есть в таблице уникальное поле, выстави в TClientDataSet св-во UpdateMode = KeyOnly и задай нужные опции у полей: InKey, InUpdate, InWhere
    п.3. Проще всего в uses проекта добавить midaslib, тогда вообще не нужны будут midas.dll

    Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 19:09 15-09-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос по той же теме: Загружаю xml файл в cxGrid (сортировки нигде нет), редактирую, сохраняю (cdsHeader.ApplyUpdates(-1);). Записи которые были отредактированы, почему то попадают в конец xml файла. Вопрос: можно ли как нибудь оставить их на своих местах. Описание и код выше. Delphi 2007 (DevExpress v48).

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 13:52 16-09-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Делаю экспорт в dbf файл при помощи halcyon (v 6.98). Halcyon поле типа datetime вроде бы не поддерживает, но поле почему то создается:
    CHDS.CreateFields.Add('RECEIPDATE;t;8;0');
    Но значение никак записать туда не могу. Можно ли как нибудь еще без каких либо компонентов записать значение в это поле (файл уже создан и известна структура)? Может какой нибудь инсерт? Delphi2006.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 12:27 23-09-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    ну вобще-то дата это тот же float
    если таблица и структура созданы то может прокатить.
    на клиенте asDateTime
    лично я остановился для работы с dbf - TDBF (Copyright  2002-2004 Брусникин И.В.)
    и зачем же повторяться http://forum.ru-board.com/topic.cgi?forum=33&topic=11215&start=60#13

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 12:59 23-09-2010 | Исправлено: greenpc, 13:00 23-09-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc вариант открыть asDateTime не подходит. В dbf уже должно быть поле со структурой datetime.
     

    Цитата:
    лично я остановился для работы с dbf - TDBF (Copyright  2002-2004 Брусникин И.В.)  

    Скачал, посмотрел, прикольно. Но там как я понял тоже нельзя создать поле со структурой datetime.
     
     
     

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 13:57 23-09-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Field1 := FormatDateTime('"dd/mm/yyyy hh:mm:ss"', Now);
    или
    ShortDataFormat := 'mm/dd/yyyy';

    Добавлено:
    Man_Without_Face

    Код:
    procedure TForm1.btn4Click(Sender: TObject);
    var
     DBFTable : TTable;
    begin
      DBFTable := TTable.Create(nil);
      with DBFTable do
      begin
        DatabaseName:='C:\temp\';
        TableName:='person.dbf';
        TableType:=ttDBase;
        TableLevel:=4;
        FieldDefs.Clear;
        FieldDefs.Add('NAME',ftString,30,false);
        FieldDefs.Add('S_DATE',ftDate);
        FieldDefs.Add(S_DateTime, ftDateTime); // почему - то   Character(30)
        CreateTable;
        Active:=true;
        Insert;
        Edit;
        FieldByName('NAME').AsString :='Test';
        FieldByName('S_DATE').Value := FormatDateTime('mm/dd/yyyy hh:mm:ss', Now-1); // только дата
        FieldByName('S_DateTime').Value :=  Now; // дата и время  
        Post;
        Free;
      end;
    end;

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 14:07 23-09-2010 | Исправлено: greenpc, 15:24 23-09-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc  
    Спасибо, но выше описанный код у меня (после того как создан dbf файл) при открытии файла dbf (dbfNavigator) выдает ошибку: "Не верный размер записи или смещение." Если убираю datetime, все нормально.

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 15:40 23-09-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    у меня все нормально _http://img713.imageshack.us/img713/1024/test1u.jpg
    единственная опечатка в пред. коде  
    FieldDefs.Add('S_DateTime', ftDateTime); // почему - то   Character(30)  
     
    - забыл апострофы
     

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 16:00 23-09-2010 | Исправлено: greenpc, 16:02 23-09-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    Мда...все равно нужно поле datetime. В dbf файле присланном заказчиком в dbfNavigator'e тип поля datetime(8). Кодовая страница: 866 Russian MS-DOS. В файлах сформированных мной: None. Может еще какие-нибудь нормальные компоненты есть?
     

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 16:37 23-09-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face

    Цитата:
    datetime(8)
    размер 8 - только дата

    для codepage вот

    Код:
      var
     fStream : TStream;
     buf : Byte;
    begin
      fStream := TFileStream.Create('C:\temp\person.dbf', fmOpenWrite);
      fStream.Seek(29, soFromBeginning); // место где указывается код
      buf :=$65; // кодовая страница
      fStream.Write(buf, 1);
      fStream.Free;
     

    коды можно посмотреть здесь _http://webhelp.esri.com/arcpad/8.0/referenceguide/index.htm#locales/task_code.htm
     
     
    Добавлено:
    Man_Without_Face
    кстати, чему равен первый байт в dbf файле?

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 08:24 24-09-2010 | Исправлено: greenpc, 09:47 24-09-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    ну и  
    1. ставим
    Microsoft OLE DB Provider for Visual FoxPro 9.0.0.3504
    или Microsoft OLE DB Provider for Visual FoxPro 8.0

    2.
    Код:
      cmd1.ConnectionString := 'Provider=VFPOLEDB.1;Data Source=C:\TEMP;Password="";Collating Sequence=RUSSIAN';
      cmd1.CommandText := 'SET NULL OFF';
      cmd1.Execute;
      cmd1.CommandText := 'CREATE DBF Test.dbf (FILIAL N(5,0), DATE D, VAL Ca(3), WDT T)';
      cmd1.Execute;
      cmd1.CommandText := 'COPY TO Work.dbf AS 866';
      cmd1.Execute;
     
    где cmd1 - TADOCommand
    или  

    Код:
    cmd1.ConnectionString := 'Provider=VFPOLEDB.1;Data Source=C:\TEMP;Password="";Collating Sequence=RUSSIAN';
      cmd1.CommandText := 'SET NULL OFF';
      cmd1.Execute;
      cmd1.CommandText := 'CREATE DBF Test.dbf  CODEPAGE=866 (FILIAL N(5,0), DATE D, VAL Ca(3), WDT T)';
      cmd1.Execute;
     
    только для 9

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 11:14 24-09-2010 | Исправлено: greenpc, 11:53 24-09-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc Спасибо. Это все для чего? Выставить кодовую страницу? А что это даст?
     
    Есть еще один вопрос: можно ли с помощью компонента halcyon записать в dbf null значения если тип поля integer. Например dBase 4 (читал вроде там null не поддерживался), clipper, foxpro2).

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 14:05 24-09-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    1 пример, который с потоком - меняет кодовую страницу
    2 пример, который с ADO - созает таблицу с полем DateTime(8)
    в котое пишется дата и время
     

    Цитата:
    dbf null значения если тип поля integer

    нет. если зачения которяе заносятся в поле >=0
    то можно вместо null записать -1

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 14:12 24-09-2010 | Исправлено: greenpc, 14:29 24-09-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc

    Цитата:
    2 пример, который с ADO - созает таблицу с полем DateTime(8)
    в котое пишется дата и время

    Если клиент в 1С загружает dbf файлы (версию не знаю) этот пример подойдет?
     

    Цитата:
    Microsoft OLE DB Provider for Visual FoxPro 9.0.0.3504

    Скачал, поставил, там в примерах есть файл, в котором в конце поле _NullFlags с типом unknown. Я так так понимаю это поле отвечает за null значения. Если его в мой dbf записывать тоже, только вот какие значения ставить и в какой системе (там вроде 16: 0x0000, 0x0400, 0x0010, 0x0410, 0x0800)?
     
     

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 15:53 24-09-2010
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru