Renomear imagem antes de colocar no controle de imagem do formulário

Version: 7.5.5.2 (X86_64) / LibreOffice Community
Build ID: ca8fe7424262805f223b9a2334bc7181abbcbf5e
CPU threads: 4; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: pt-BR (pt_BR.UTF-8); UI: pt-BR
Calc: threaded

Boa tarde, já trouxe esse tópico para o fórum inglês, mas não obtive respostas. Estou criando um banco de dados para uso de terceiros, preciso que as imagens guardadas nele estejam com os nomes padronizados, porém não posso deixar essa tarefa para o usuário final. Preciso que as imagens adicionadas ao controle de imagem em um dos formulários (que está ligado a um campo de texto em uma das tabelas do BD), sejam renomeadas com base na ID da própria foto e a ID do objeto com que ela está ligada.

Exemplo: maxresdefault.jpg > após selecionar > 1.2.jpg > sendo 1 o ID do objeto e 2 a ID da foto, ou seja, existe uma foto antes dessa linkada ao mesmo objeto, sendo a 1.1.jpg.

Seria necessário uma maneira de deletar essas imagens também, para que não fiquem imagens que não estão sendo usadas na base de dados guardadas na pasta. Todas as imagens são guardadas na pasta fotos, que fica dentro da pasta banco de dados, onde está o arquivo .odb, tudo isso para permitir a portabilidade de um sistema para outro.

Macro com qual resolvi o problema

Sub RenomearImg(oEvent AS OBJECT)

	DIM forms AS OBJECT
	DIM idfoto AS OBJECT
	DIM idcarro AS OBJECT
	DIM idcarrotext AS STRING
	DIM idfototext AS STRING
	DIM oDoc AS OBJECT
	DIM oForm AS OBJECT
	DIM oField AS OBJECT
	DIM oShell AS OBJECT
	DIM stUrl AS STRING
	DIM stField AS STRING
	DIM arUrl_Start()
	DIM stFieldDif AS STRING
	Dim oConnection As Object
	
	forms = ThisComponent.DrawPage.Forms.getByName("MainForm")
	idcarro = forms.getByName("IDCarro")
	idcarrotext = idcarro.text
	oDoc = thisComponent
	oForm =  forms.getByName("SubFormFoto")
	oField = oForm.getByName("Foto")
	idfoto = oForm.getByName("IDFoto")
	idfototext = idfoto.text
	stUrl = oField.BoundField.getString
	linkfoto= oForm.getByName("LinkFoto")
	
	oConnection = forms.activeConnection()
	oStatement = oConnection.createStatement()
	sSQL= "Select Count(*) FROM ""DBFoto"" WHERE ""IDCarro"" = '" & idcarrotext & "'"
	result = oStatement.executeQuery(sSQL)
	result.next
	MyData = result.getString(1)
	MyData=CInt(MyData)
	
	IF stUrl <> "" THEN
	
		arUrl_Start = split(oDoc.Parent.Url,right(convertToUrl(oDoc.Parent.Title),len(convertToUrl(oDoc.Parent.Title))-8))
		oShell = createUnoService("com.sun.star.system.SystemShellExecute")
		stField = convertToUrl(arUrl_Start(0) + stUrl)
		tamanho = Len(stField) 
		i=0
		tamanhomenor = tamanho 
		existe=FileExists(stField)
		
		if existe = True then
		
			Do While i < tamanho 
			
				temp = Mid(stField, tamanhomenor, 1) 
				
				if temp = "/" then 
				
					tocut = tamanho - tamanhomenor 
					cortado= tamanho - tocut
					newtext =  Mid(stField, 1, cortado)
					nome= "Fotos/"+"carro" +idcarrotext + "." +"foto"+MyData  + ".jpg"
					destino = convertToUrl(arUrl_Start(0)+nome)
					
					if stField <> destino then
					
						FileCopy stField, destino
					
						tamanhourl = Len(stUrl)
						tamanhomenos=tamanhourl
						j=0
						
						do while j < tamanhourl
							
							textcheck = Mid(stUrl, tamanhomenos, 1)
							
							if textcheck="/" then
							
								quantidadecorte=tamanhourl-tamanhomenos
								cortefeito=tamanhourl-quantidadecorte
								textostr=Mid(stUrl, 1, cortefeito)
								linkfoto.BoundField.updateString(nome)
								
								dim document   as object
								dim dispatcher as object
								document   = ThisComponent.CurrentController.Frame
								dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
								dispatcher.executeDispatch(document, ".uno:RecSave", "", 0, Array())
								
								j=tamanhourl
								
							end if
									
							tamanhomenos=tamanhomenos-1
							j=j+1		
									
						loop
					
					else stop
					
					end if
					
					i=tamanho
					
				end if 
				
				tamanhomenor=tamanhomenor-1
				i=i+1
				
			Loop
			
		end if

	END IF
	
END SUB
1 Like