TL; DR: Cách sử dụng FBExport trên Ubuntu/cách xuất kết quả truy vấn Firebird sang tệp csv.
Tôi muốn xuất kết quả truy vấn từ cơ sở dữ liệu firebird sang tệp csv.
Trên Windows, tôi thực hiện công việc tương tự bằng FBExport.
Thật không may, tôi không biết sử dụng công cụ này trên Ubuntu.
Tôi đã tải xuống gói từ http://www.firebirdfaq.org/fbexport.php
Khi tôi thử chạy ./fbexport, tôi gặp lỗi:
./fbexport: lỗi khi tải thư viện dùng chung: libfbclient.so.2:
không thể mở tệp đối tượng được chia sẻ: Không có tệp hoặc thư mục như vậy
Tôi cũng đã thử biên dịch pack.
Đầu tiên tôi thay đổi chế tạo
tập tin từ:
################################################# ############################
.SUFFIXES: .o .cpp
OBJECTS_FBE=fbexport/ParseArgs.o fbexport/FBExport.o fbexport/cli-main.o
OBJECTS_FBC=fbcopy/args.o fbcopy/fbcopy.o fbcopy/TableDependency.o fbcopy/main.o
# Trình biên dịch & cờ liên kết
COMPILE_FLAGS=-O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp
LINK_FLAGS=-pthread -lfbclient
#COMPILE_FLAGS=-O1 -DIBPP_WINDOWS -DIBPP_GCC -Iibpp
#LINK_FLAGS=
tất cả: exe/fbcopy exe/fbexport
exe/fbexport: $(OBJECTS_FBE) ibpp/all_in_one.o
g++ $(LINK_FLAGS) ibpp/all_in_one.o $(OBJECTS_FBE) -oexe/fbexport
exe/fbcopy: $(OBJECTS_FBC) ibpp/all_in_one.o
g++ $(LINK_FLAGS) ibpp/all_in_one.o $(OBJECTS_FBC) -oexe/fbcopy
# Chỉ dành cho Linux
# FB2.0: g++ -pthread -lfbclient $(OBJECTS) -o$(EXENAME)
# FB1.5: g++ -lfbclient $(OBJECTS) -o$(EXENAME)
# FB1.0: g++ -lgds -lcrypt -lm $(OBJECTS) -o$(EXENAME)
Tải về:
cài đặt exe/fbcopy/usr/bin/fbcopy
cài đặt exe/fbexport/usr/bin/fbexport
.cpp.o:
g++ -c $(COMPILE_FLAGS) -o $@ $<
dọn dẹp:
rm -f fbcopy/*.o
rm -f ibpp/all_in_one.o
rm -f exe/fbcopy*
rm -f fbexport/*.o
rm -f exe/fbexport*
#EOF
đến:
################################################# ############################
.SUFFIXES: .o .cpp
OBJECTS_FBE=fbexport/ParseArgs.o fbexport/FBExport.o fbexport/cli-main.o
# Trình biên dịch & cờ liên kết
COMPILE_FLAGS=-O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp
LINK_FLAGS=-pthread -lfbclient
#COMPILE_FLAGS=-O1 -DIBPP_WINDOWS -DIBPP_GCC -Iibpp
#LINK_FLAGS=
tất cả: exe/fbexport
exe/fbexport: $(OBJECTS_FBE) ibpp/all_in_one.o
g++ $(LINK_FLAGS) ibpp/all_in_one.o $(OBJECTS_FBE) -oexe/fbexport
# Chỉ dành cho Linux
# FB2.0: g++ -pthread -lfbclient $(OBJECTS) -o$(EXENAME)
# FB1.5: g++ -lfbclient $(OBJECTS) -o$(EXENAME)
# FB1.0: g++ -lgds -lcrypt -lm $(OBJECTS) -o$(EXENAME)
Tải về:
cài đặt exe/fbexport/usr/bin/fbexport
.cpp.o:
g++ -c $(COMPILE_FLAGS) -o $@ $<
dọn dẹp:
rm -f ibpp/all_in_one.o
rm -f fbexport/*.o
rm -f exe/fbexport*
#EOF
(vì tôi chỉ muốn biên dịch FBExport (không bao gồm FBCopy))
Sau thay đổi này, tôi đã thử chạy chế tạo
trong thư mục chính.
Đầu ra:
user@apiserver:~/fbexport-1.90$ tạo
g++ -c -O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp -o fbexport/ParseArgs.o fbexport/ParseArgs.cpp
g++ -c -O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp -o fbexport/FBExport.o fbexport/FBExport.cpp
fbexport/FBExport.cpp: Trong chức năng thành viên âstd::string FBExport::CreateHumanString(IBPP::Statement&, int)â:
fbexport/FBExport.cpp:318:29: cảnh báo: định dạng â%ldâ mong đợi đối số kiểu âlong intâ, nhưng đối số 3 có kiểu âintâ [-Wformat=]
318 | sprintf(str, "%ld", x);
| ~~^~
| | |
| | int
| int dài
| %d
fbexport/FBExport.cpp:40:21: cảnh báo: định dạng â%lliâ dự kiến đối số thuộc loại âlong long intâ, nhưng đối số 3 có loại âint64_tâ {hay còn gọi là âlong intâ} [-Wformat=]
40 | #define INT64FORMAT "%lli"
| ^~~~~~~
fbexport/FBExport.cpp:351:26: lưu ý: trong phần mở rộng của macro âINT64FORMATâ
351 | sprintf(str, INT64FORMAT, int64val);
| ^~~~~~~~~~~~~
fbexport/FBExport.cpp:40:25: lưu ý: chuỗi định dạng được xác định tại đây
40 | #define INT64FORMAT "%lli"
| ~~~^
| |
| dài dài int
| %li
fbexport/FBExport.cpp: Trong hàm thành viên âbool FBExport::CreateString(IBPP::Statement&, int, std::string&)â:
fbexport/FBExport.cpp:429:29: cảnh báo: định dạng â%ldâ mong đợi đối số kiểu âlong intâ, nhưng đối số 3 có kiểu âintâ [-Wformat=]
429 | sprintf(str, "%ld", x);
| ~~^~
| | |
| | int
| int dài
| %d
fbexport/FBExport.cpp:435:29: cảnh báo: định dạng â%ldâ cần đối số kiểu âlong intâ, nhưng đối số 3 có kiểu âintâ [-Wformat=]
435 | sprintf(str, "%ld", d.GetDate());
| ~~^~~~~~~~~~~~~
| | |
| dài int int
| %d
fbexport/FBExport.cpp:440:29: cảnh báo: định dạng â%ldâ cần đối số kiểu âlong intâ, nhưng đối số 3 có kiểu âintâ [-Wformat=]
440 | sprintf(str, "%ld", t.GetTime());
| ~~^~~~~~~~~~~~~
| | |
| dài int int
| %d
fbexport/FBExport.cpp:40:21: cảnh báo: định dạng â%lliâ dự kiến đối số thuộc loại âlong long intâ, nhưng đối số 3 có loại âint64_tâ {hay còn gọi là âlong intâ} [-Wformat=]
40 | #define INT64FORMAT "%lli"
| ^~~~~~~
fbexport/FBExport.cpp:462:26: lưu ý: trong phần mở rộng của macro âINT64FORMATâ
462 | sprintf(str, INT64FORMAT, int64val);
| ^~~~~~~~~~~~~
fbexport/FBExport.cpp:40:25: lưu ý: chuỗi định dạng được xác định tại đây
40 | #define INT64FORMAT "%lli"
| ~~~^
| |
| dài dài int
| %li
fbexport/FBExport.cpp: Trong chức năng thành viên âint FBExport::Export(IBPP::Statement&, FILE*)â:
fbexport/FBExport.cpp:487:18: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
487 | đăng ký int fc = st->Columns();
| ^~
fbexport/FBExport.cpp:491:23: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
491 | for (đăng ký int i=1; i<=fc; i++)
| ^
fbexport/FBExport.cpp:505:27: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
505 | for (register int i=1; i<=fc; i++) // ... xuất tất cả các trường ra tệp.
| ^
fbexport/FBExport.cpp: Trong chức năng thành viên âint FBExport::ExportHuman(IBPP::Statement&, FILE*)â:
fbexport/FBExport.cpp:829:18: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
829 | đăng ký int fc = st->Columns();
| ^~
fbexport/FBExport.cpp:835:27: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
835 | for (register int i=1; i<=fc; i++) // xuất tiêu đề CSV.
| ^
fbexport/FBExport.cpp:847:27: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
847 | for (register int i=1; i<=fc; i++) // ... xuất tất cả các trường ra tệp.
| ^
fbexport/FBExport.cpp:860:27: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
860 | for (register int i=1; i<=fc; i++) // xuất tiêu đề CSV.
| ^
fbexport/FBExport.cpp:875:27: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
875 | for (register int i=1; i<=fc; i++) // ... xuất tất cả các trường ra tệp.
| ^
fbexport/FBExport.cpp: Trong hàm âint statement_length(FILE*)â:
fbexport/FBExport.cpp:1335:24: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
1335 | đăng ký int c = 0, tmp = 0;
| ^
fbexport/FBExport.cpp:1335:31: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
1335 | đăng ký int c = 0, tmp = 0;
| ^~~
fbexport/FBExport.cpp:1336:24: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
1336 | đăng ký int l = 0;
| ^
fbexport/FBExport.cpp: Trong hàm âchar* read_statement(char*, int, FILE*)â:
fbexport/FBExport.cpp:1376:24: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
1376 | đăng ký int c = 0, tmp = 0;
| ^
fbexport/FBExport.cpp:1376:31: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
1376 | đăng ký int c = 0, tmp = 0;
| ^~~
fbexport/FBExport.cpp:1377:25: cảnh báo: ISO C++17 không cho phép trình xác định lớp lưu trữ âregisterâ [-Wregister]
1377 | đăng ký char *P;
| ^
fbexport/FBExport.cpp: Trong chức năng thành viên âstd::string FBExport::CreateHumanString(IBPP::Statement&, int)â:
fbexport/FBExport.cpp:339:17: cảnh báo: bỏ qua giá trị trả về của âchar* gcvt(double, int, char*)â được khai báo với thuộc tính âwarn_unused_resultâ [-Wunused-result]
339 | gcvt(fval, 19, str);
| ~~~^~~~~~~~~~~~~~~~~~~
fbexport/FBExport.cpp:345:17: cảnh báo: bỏ qua giá trị trả về của âchar* gcvt(double, int, char*)â được khai báo với thuộc tính âwarn_unused_resultâ [-Wunused-result]
345 | gcvt(dval, 19, str);
| ~~~^~~~~~~~~~~~~~~~~~~
fbexport/FBExport.cpp: Trong hàm thành viên âbool FBExport::CreateString(IBPP::Statement&, int, std::string&)â:
fbexport/FBExport.cpp:452:17: cảnh báo: bỏ qua giá trị trả về của âchar* gcvt(double, int, char*)â được khai báo với thuộc tính âwarn_unused_resultâ [-Wunused-result]
452 | gcvt(fval, 19, str);
| ~~~^~~~~~~~~~~~~~~~~~~
fbexport/FBExport.cpp:457:17: cảnh báo: bỏ qua giá trị trả về của âchar* gcvt(double, int, char*)â được khai báo với thuộc tính âwarn_unused_resultâ [-Wunused-result]
457 | gcvt(dval, 19, str);
| ~~~^~~~~~~~~~~~~~~~~~~
fbexport/FBExport.cpp: Trong chức năng thành viên âint FBExport::Import(IBPP::Statement&, FILE*)â:
fbexport/FBExport.cpp:706:26: cảnh báo: bỏ qua giá trị trả về của âsize_t fread(void*, size_t, size_t, FILE*)â được khai báo với thuộc tính âwarn_unused_resultâ [-Wunused-result]
706 | fread(buff, size, 1, fp);
| ~~~~^~~~~~~~~~~~~~~~~~~
fbexport/FBExport.cpp: Trong hàm thành viên âint FBExport::Init(Arguments*)â:
fbexport/FBExport.cpp:1211:41: cảnh báo: â__builtin___sprintf_chkâ có thể viết một kết thúc nul ở cuối đích [-Wformat-overflow=]
1211 | sprintf(num, "%d", i+1);
| ^
Trong tệp bao gồm từ /usr/include/stdio.h:888,
từ/usr/gồm/c++/11/cstdio:42,
từ /usr/include/c++/11/ext/string_conversions.h:43,
từ /usr/include/c++/11/bits/basic_string.h:6606,
từ/usr/gồm/C++/11/chuỗi:55,
từ ibpp/ibpp.h:91,
từ fbexport/FBExport.cpp:44:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:34: lưu ý: â__builtin___sprintf_chkâ xuất từ 2 đến 11 byte vào đích có kích thước 10
38 | trả về __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~
39 | __glibc_objsize (__s), __fmt,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40 | __va_arg_pack());
| ~~~~~~~~~~~~~~~~~~~
g++ -c -O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp -o fbexport/cli-main.o fbexport/cli-main.cpp
g++ -c -O1 -DIBPP_LINUX -DIBPP_GCC -Iibpp -o ibpp/all_in_one.o ibpp/all_in_one.cpp
g++ -pthread -lfbclient ibpp/all_in_one.o fbexport/ParseArgs.o fbexport/FBExport.o fbexport/cli-main.o -oexe/fbexport
Tôi có thể làm gì trong trường hợp này?
Trân trọng
tomasz