2014-03-19 7 views
1

나는 MySQL 데이터베이스에서 Postgres로 변환했다. 변환하는 동안 Postgres의 그림 열이 bytea로 만들어졌습니다.Postgres와 Xojo를 사용하는 그림

이 Xojo 코드는 MySQL에서는 작동하지만 Postgres에서는 작동하지 않습니다.

Dim mImage as Picture 

mImage = rs.Field("Picture").PictureValue 

아이디어가 있으십니까? 내가 여기에이 특정 문제에 대해 알고 있지만하지 않는

답변

1

은 아마도 자신을 발견 할 수있는 작업은 다음과 같습니다

사진이 데이터베이스에 BLOB에 저장됩니다. 이제 이는 열이 BLOB (또는 유사한 2 진 유형)로 선언되어야 함을 의미합니다. 실수로 TEXT로 표시 되었다면 데이터베이스가 다른 방법으로 내 보내지 않는 한 작동합니다. 즉, Xojo 코드 만이 레코드에 읽고 쓰고, PictureValue 함수를 사용하면 BLOB 형식으로 데이터를 유지 관리합니다. 그러나 다른 데이터베이스로 변환하면 BLOB 데이터가 텍스트로 읽히고 그 프로세스에서 변환 될 수 있습니다.

그래서 DB를 어떻게 변환했는지 알려주는 것이 적절할 수 있습니다. SQL 명령으로 내보내기를 수행 한 다음이 명령을 다시 실행하여 Postgres로 가져 왔습니까? 아직 내보내기 파일이 있습니까? 그렇다면 그림 데이터가 포함 된 레코드를 찾아서 해당 데이터가 다음으로 시작하는지 확인하십시오. x '다음 16 진수 바이트 코드가 들어 있습니다. x'45FE1200 ... 등등. 그렇지 않다면 그것은 내 의심의 또 다른 지표입니다.

그래서 이전 DB의 그림 열의 유형을 먼저 확인하십시오. 이진 데이터 유형을 지정하면 위의 내용이 적용되지 않습니다.

다음으로 Xojo가 읽는 실제 바이너리 데이터를 볼 수 있습니다. 이를 위해서 PictureValue 대신 BlobValue를 가져 와서 MemoryBlock에 저장하십시오. 이전 사진과 새 사진을 모두 한 장의 사진에 동일하게 적용하십시오. 메모리 블록은 동일한 바이트를 포함해야합니다. 그렇지 않으면 데이터가 올바르게 전송되지 않았다고 제안됩니다. 왜? 글쎄, 당신이 그것을 어떻게 바 꾸었 느냐에 달려 있습니다.

+0

그림이 MySQL에 LONGBLOB으로 저장되고 'Blob에 16 진수 형식 사용'옵션이있는 Navicat 데이터 전송을 사용하여 Postgres로 내 보냅니다. \ 377 \ 330 \ 377 \ 340 \ 000 \ 020JFIF \ 000 \ 001 \ 001 \ 000 \ 000 \ 001 \ 000 \ 001 \ 000 \ 000 \ 377 \ 355 \ 000X 포토샵 3.0 \ 0008BIM \ 004 \ 004 \ 000 \ 000 \ 000 \ 000 \ 000 \ 037 \ 034 \ 001Z \ 000 \ 003 \ 033 % G \ 034 \ 002 \ 000 \ 000 \ 002 \ 000 \ 002 \ 034 \ 002 \ 031 \ 000 \ 013 사진 부스 \ 0008BIM \ 004 % \ 000 \ 000 \ 000 \ 000 \ 000 \ 020qyd (...) – kipsoft

+0

만약 이것을 이해한다면, 데이터 전송은 Navicat에서 옵션으로 지정 되었더라도 16 진수 형식을 유지하지 못합니다. 내가 맞습니까? 그렇다면 데이터를 Postgres로 이식하고 데이터를 이미지로 유지하는 방법은 무엇입니까? – kipsoft

+0

내용이 8 진 \ xxx 이스케이프 코드로 텍스트 표현을 사용한다는 것은 이상한 일입니다. 나는 당신이 수작업으로 포스트그레스에서 작동하는지 확인하기 위해 16 진수 형식으로 그 사진 중 하나의 BLOB 데이터를 수동으로 전송할 수 있는지 궁금하다. 다른 SQL 편집기를 사용해보십시오. 사용중인 SQL 편집기에 버그가 있습니다. –