Mismatch in datapacket валента ошибка как исправить

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 Sasse's user avatar

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

Mike's user avatar

1

  • I don’t use midas.dll, I compile MidasLib with my project.

    Jan 27, 2010 at 14:08


Форум программистов Vingrad

Новости ·
Фриланс ·
FAQ

Правила ·
Помощь ·
Рейтинг ·
Избранное ·
Поиск ·
Участники

Форум -> Программирование -> C++ -> C/C++: Базы данных
(еще)

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Mismatch in datapacket, :wizard  

:(

   

Опции темы

Progis
Дата 22.9.2008, 10:31 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 21
Регистрация: 15.7.2008

Репутация: нет
Всего: нет

У меня такой вопрос, ставлю на форму ClientDataSet  делаю его активным, применяю метод ApplyUpdates. Выдается ошибка  Mismatch in datapacket..затем применяю снова («ClientDataSet->ApplyUpdates(0) висит на кнопке «) Данные заносятся нормально ..  smile Вообще чем может вызвана такая ошибка?

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «C++: Базы данных»
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »

Подписаться на тему |
Подписка на этот форум |
Скачать/Распечатать тему

[ Время генерации скрипта: 0.1112 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]

Реклама на сайте
   
Информационное спонсорство

Понравилась статья? Поделить с друзьями:
  • Mozabrick ошибка 500
  • Minecraft ошибка драйвера видеокарты
  • Lada granta ошибка u0100
  • Moxelui dll ошибка
  • Minecraft ошибка видеодрайвера