ฉันต้องการนำเข้าไฟล์ xls ขนาดใหญ่ไปยังฐาน MySQL ฉันลองใช้โครงสร้าง "LOAD DATA INFILE" ข้อมูลใน xls มีอักขระซีริลลิก ดังนั้นฉันจึงมีปัญหาบางอย่างกับมัน ฉันสร้างไฟล์ดัมพ์ด้วยตนเอง แต่ "LOAD DATA INFILE" ไม่โหลดอักขระซีริลลิก คำสั่ง MySQL "SELECT ... INTO OUTFILE" ทำงานได้สมบูรณ์แบบ แต่ฉันใช้ไม่ได้เพราะฉันต้องการนำเข้าจาก "SELECT ... INTO OUTFILE" บันทึกไฟล์ด้วยชุดอักขระไบนารี ฉันจะทำเช่นนั้นกับ Delphi 2009 ได้อย่างไร
รหัสของฉัน:
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 สร้างไฟล์ใด และจำเป็นต้องสร้างไฟล์ดังกล่าวโดย Delphi ใน MySQL ช่วยให้การเข้ารหัสนี้เรียกว่า 'ชุดอักขระไบนารี' ดังนั้นฉันจะบันทึกไฟล์ในการเข้ารหัสโดย Delphi นี้ได้อย่างไร