MySQLベースに大きなxls-fileをインポートする必要があります。私は "LOAD DATA INFILE"構造を使用しようとしています。 xlsのデータにはキリル文字が含まれているため、いくつか問題があります。私は手動でダンプファイルを作成しますが、 "LOAD DATA INFILE"はキリル文字をロードしません。 MySQLの命令 "SELECT ... INTO OUTFILE"は完璧ですが、 "SELECT ... INTO OUTFILE"からバイナリキャラクタセットでファイルを保存する必要があるため、使用できません。Delphiとバイナリ文字セット(MySQL用)
マイコード:
procedure TfmImportGoods.btnImportClick(Sender: TObject);
var
sToFile: TStringStream;
sTemp: AnsiString;
function FixString(s: String): String;
begin
Result := s;
Result := SysUtils.StringReplace(Result, #10, '', [rfReplaceAll]);
Result := SysUtils.StringReplace(Result, #13, '', [rfReplaceAll]);
end;
begin
fmMain.MyScript.SQL.Text := 'TRUNCATE TABLE goods';
fmMain.MyScript.Execute;
adoImport.Close;
adoImport.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
fmMain.dlgOpenGoods.FileName+
';Mode=ReadWrite|Share Deny None;Extended Properties=Excel 8.0;Persist Security Info=False';
adoImport.SQL.Text := 'SELECT * FROM ['+lbTables.Items[0]+']';
adoImport.Open;
sTemp := '';
try
while not adoImport.Eof do
begin
sTemp := sTemp +
#9+adoImport.FieldByName('Код').AsString+#9+
adoImport.FieldByName('Производитель').AsString+#9+
adoImport.FieldByName('Модель').AsString+#9+
adoImport.FieldByName('Артикул').AsString+#9+
FixString(adoImport.FieldByName('Описание').AsString)+#9+
adoImport.FieldByName('Кол-во').AsString+#9+
//TODO: проверить
{SysUtils.StringReplace(
adoImport.FieldByName('Розн#цена').AsString), ',', '.', [rfReplaceAll]),}
adoImport.FieldByName('Розн#цена').AsString+#9+
adoImport.FieldByName('Информация').AsString+#9+
adoImport.FieldByName('Гарантия').AsString+#10;
adoImport.Next;
end;
sToFile := TStringStream.Create(sTemp, 1252);
sToFile.SaveToFile(ExtractFilePath(Application.ExeName)+'import.txt');
fmMain.MyScript.SQL.Text := 'LOAD DATA INFILE '''+
fmMain.ScreenSpecs(ExtractFilePath(Application.ExeName)+'import.txt')+''' INTO TABLE goods';
fmMain.MyScript.Execute;
ShowMessage('Новый список товаров был успешно импортирован!');
finally
sToFile.Free;
end;
end;
私が知っているMySQLが作成するファイル、およびデルファイにより、このようなファイルを作成するために必要なもの。 MySQLのヘルプでは、このエンコーディングは「バイナリ文字セット」と呼ばれています。だから、このエンコーディングでファイルをDelphiでどのように保存できますか?