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 126 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, DB, DBClient, DBCtrls, Grids, DBGrids; type TForm1 = class(TForm) DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; ClientDataSet1: TClientDataSet; DataSource1: TDataSource; Button1: TButton; Button2: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Image1: TImage; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var m,m1,m2: TMemoryStream; s1,s2:int64; begin if savedialog1.Execute then begin m:=TMemoryStream.Create; m1:=TMemoryStream.Create; m2:=TMemoryStream.Create; try clientdataset1.SaveToStream(m1); image1.Picture.Bitmap.SaveToStream(m2); s1:=m1.Size; s2:=m2.Size; m.Write(s1,sizeof(s1)); m.Position:=sizeof(s1); m1.Position:=0; m.CopyFrom(m1,s1); m.Position:=m.Position+s1; m.Write(s2,sizeof(s2)); m.Position:=m.Position+sizeof(s2); m2.Position:=0; m.CopyFrom(m2,s2); m.Position:=0; m.SaveToFile(savedialog1.FileName); finally m.Free; m1.Free; m2.Free; end; end; end; procedure TForm1.Button2Click(Sender: TObject); var m,m1,m2:TMemoryStream; s1,s2:int64; begin if opendialog1.Execute then begin m:=TMemoryStream.Create; m1:=TMemoryStream.Create; m2:=TMemoryStream.Create; try m.LoadFromFile(opendialog1.FileName); clientdataset1.Active:=true; m.Position:=0; m.Read(s1,sizeof(s1)); m.Position:=sizeof(s1); m1.CopyFrom(m,s1); m1.Position:=0; clientdataset1.LoadFromStream(m1); m.Position:=m.Position+s1; m.Read(s2,sizeof(s2)); m.Position:=m.Position+sizeof(s2); m2.CopyFrom(m,s2); m2.Position:=0; image1.Picture.Bitmap.LoadFromStream(m2); finally m.Free; m1.Free; m2.Free; end; end; end; procedure TForm1.Button3Click(Sender: TObject); begin if opendialog1.Execute then begin image1.Picture.LoadFromFile(opendialog1.FileName); end; end; procedure TForm1.FormCreate(Sender: TObject); begin clientdataset1.FileName:=''; end; procedure TForm1.Button4Click(Sender: TObject); begin clientdataset1.First; while not clientdataset1.Eof do clientdataset1.Delete; image1.Picture.Bitmap.LoadFromFile('2.bmp'); end; end. |
#delphi #datasnap #delphi-10.3-rio
#delphi #datasnap #delphi-10.3-rio
Вопрос:
Я на Delphi 10.3. Я часто использую TClientDataSet в своих приложениях как способ локального хранения небольшого объема информации, обычно менее 10000 строк.
В основном я создаю структуру таблицы и сохраняю ее на диске :
myClientDataSet.savetofile('c:mydata.dat') ;
Это отличный способ иметь механизм сохранения без необходимости установки какой-либо базы данных. Это работает, но я заметил, что в какой-то момент я больше не могу открыть файл, потому что при попытке загрузить :
myClientDataSet.loadfromfile('c:mydata.dat');
Я получу эту ошибку :
Mismatch in datapacket.
Насколько я знаю, когда это происходит, единственное исправление — удалить файл и создать новый, потеряв все данные (или восстановив резервную копию, если она существует). В некоторых случаях для возникновения этой проблемы потребуются годы, но она всегда возникает в какой-то момент.
Что я могу сделать, чтобы избежать этой проблемы, и если это уже произошло, есть ли способ восстановить файл данных с этой ошибкой?
Спасибо
Комментарии:
1. «есть ли способ восстановить данные» Откройте файл с помощью текстового редактора, чтобы посмотреть, что в нем.
2. Возникает ли ошибка также после перезагрузки? Я прошу выделить две возможные причины: файл открыт чем-то другим или содержимое файла повреждено. Другой вопрос: возникает ли ошибка после обновления файла?
3. @Olivier Это двоичный файл, ничего не видно.
4. «могу ли я что-нибудь сделать для восстановления (даже частичного) его данных» Никто не знает, что случилось с вашим файлом, поэтому мы не можем ответить на этот вопрос. Вместо этого вы могли бы попробовать использовать формат XML (я забыл, что формат по умолчанию был двоичным). Он более подробный, но в случае повреждения гораздо проще увидеть, что произошло, и восстановить некоторые данные.
5. Вы также можете сохранить резервную копию (например, mydata.bak). Если файл mydata.dat поврежден и не может быть загружен, вы можете предупредить пользователя и вместо этого загрузить резервную копию.
-
delphi
-
delphi-7
-
tclientdataset
- 12-12-2019
|
Question
I have a .cds file that suggest it is TClientDataSet
file. When I try to open it whit TClientDataSet
in Delphi 7, when set Active
to true
, error «Mismatch in datapacket» has occurred. Please help me
No correct solution
OTHER TIPS
I just downloaded that file and can confirm that it definitely isn’t valid CDS file
use the xml mapper tool if you have one and after mapping select all and then from the Create mrnu, DataPacket from XML
I’m often getting this exception «EDBClient: Mismatch in datapacket»
when I call ApplyUpdates on a particular ClientDataSet.
I can’t reproduce on my machine and I think it started after upgrading
to Delphi 2010, because this code is untouched for a long time.
An additional information is that I don’t use midas.dll, I compile MidasLib unit with my project.
Thanks for any comments.
- delphi
- delphi-2010
- datasnap
asked Jan 27, 2010 at 11:58
Erick SasseErick Sasse
2,7693 gold badges24 silver badges30 bronze badges
1
-
i suspect they changed the component, but not the manual ,to reflect the changed.
May 28, 2012 at 11:03
1 Answer
Check midas.dll version
answered Jan 27, 2010 at 13:43
1
-
I don’t use midas.dll, I compile MidasLib with my project.
Jan 27, 2010 at 14:08
Форум программистов Vingrad
Новости ·
Фриланс ·
FAQ
Правила ·
Помощь ·
Рейтинг ·
Избранное ·
Поиск ·
Участники
Форум -> Программирование -> C++ -> C/C++: Базы данных
(еще)
Поиск: |
|
Опции темы |
Progis |
|
||
Новичок Профиль Репутация: нет
|
У меня такой вопрос, ставлю на форму ClientDataSet делаю его активным, применяю метод ApplyUpdates. Выдается ошибка Mismatch in datapacket..затем применяю снова («ClientDataSet->ApplyUpdates(0) висит на кнопке «) Данные заносятся нормально .. |
||
|
|||
|
Правила форума «C++: Базы данных» | |
|
Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах. Благодарим за понимание. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | C/C++: Базы данных | Следующая тема » |
Подписаться на тему |
Подписка на этот форум |
Скачать/Распечатать тему
[ Время генерации скрипта: 0.0789 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Реклама на сайте
Информационное спонсорство