Datastore returning 0

Hello. I have this DataStore here that I am using for a donation board. Money should return 100 for me, since the number 100 is stored for me under DonationDataS, however, Money returns 0 under my user ID. When I print my datastore, it prints “100” like it should, but this time, it doesn’t. Can anyone help? Here is my script.

    local service = game:GetService("DataStoreService")
local DLeaderboard = service:GetOrderedDataStore("DonationDataS")

local function upadteLeaderboard()
	local success,errormessage = pcall(function()
		local Data = DLeaderboard:GetSortedAsync(false, 50)
		local DonationPage = Data:GetCurrentPage()
		for Rank, data in ipairs(DonationPage) do
			local userName  = game.Players:GetNameFromUserIdAsync(tonumber(data.key))
			local Name = userName
			local Money = data.value
			local isOnLeaderboard = false
			for i,v in pairs(workspace.DonationBoard.MainBoard.Main.SurfaceGui.ScrollingFrame:GetChildren()) do
				if v:IsA("Frame") and v.User.Text == Name then
					isOnLeaderboard = true
					break
				end
			end
			if Money and isOnLeaderboard == false then
				local newLbFrame = game.ReplicatedStorage.Sample:Clone()
				newLbFrame.User.Text = Name
				newLbFrame.Amount.Text = Money
				newLbFrame.Number.Text = "#" .. Rank
				newLbFrame.Name = "Donator" .. Rank
				newLbFrame.Parent = workspace.DonationBoard.MainBoard.Main.SurfaceGui.ScrollingFrame
			end
			for i = 1, #workspace.DonationBoard.MainBoard.Main.SurfaceGui.ScrollingFrame:GetChildren() do
				local amount = i - 1
				workspace.DonationBoard.MainBoard.Main.SurfaceGui.ScrollingFrame.CanvasSize = UDim2.new(0,0,0,i*amount)
			end
		end
	end)
	if not success then
		print("Error: " .. errormessage)
	end
end

while true do
	for _, frame in pairs(workspace.DonationBoard.MainBoard.Main.SurfaceGui.ScrollingFrame:GetChildren()) do
			if frame:IsA("Frame") then
				frame:Destroy()
			end
	end
	
	upadteLeaderboard()
	wait(30)
end

Actually… Hold on, let me double check my own knowledge. One moment.

You can change a surface gui with a server script.

Yes you can. Apologies. I’d forgotten the reason I set mine up differently, is because I wanted each client to have different values.
You obviously set the adornee…
Hmmm
The issue as it is, remains that when the value changes in data store, it remains the same on the surfaceGUI? try adding a print inside your while true, which prints the value of that leaderboard Value after every 30 seconds.

I ask you to do this, so it is outside of the update function, to see if it works properly, then the leaderboard value should return something different. Also print the physical surface text as well after you print the value.